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
zcmeHtbx>SEx97~@3GNO<65K5~1cGZIxVyXiU;%<_kl+v?!QI{6-3boCVep;o+kN%b
zzWS<m>;3a~_v@+O?bCg4ch8*DeeRK&7{}VksU+S6{4Yfa00($}K>;BCLq8Bk|HXeV
zm;e9>M*M9*zr4KsTPFYjBmY(YFXF%x?7RMz-(UPK2rxnZl{pd&$S|P5@Ct_4FrdPK
z1_L?_7%;%L000XHY#4B0z=Z)127DL@U?7Cyf6n`Fv;XV*UyTFG0DIWS1waW92iU=C
zCx9nRYXAEMAAs=hXa3)H!#^9I$h+Q?I}7|reZdak0&oNL0qg)X01v<vU<7OP!fHc+
z34jv@6M!-7j@dt(5kL<B0soPw|MbCsxB(BN9q9g{<3CCMpRWI(T<$*%|Ie)dk7NHu
z|NqB<zd9NY295u59$Lw=Ox~5W-2aD7_OFirCpqxX<R7l2Ac^*h`0uM9O<L-sGOSkr
z3*^7Xf#blU4Xgq>D@%$3%Em|!U=4Wl5Aq)XfXbNHkA^TKf(|78@xx~iz0nMmmRZ%=
z+j(Ahqxeq_21<^v#6^@GdOX9vi&M;yJIj@3jwmzYym6A^@Wo>)#Fgg|=Nv_poS7N%
zr0NALf9wfAh~7hgard2XY~S8>0HWQ`42@>a>mAk4uX&&NjtOeky|S{i8%s+|tE#K3
zE2*vJvbMAg=S)n-A$S!c)&6{cv^XhAk)f)lW_DEG?srq2^~7jxV-wk?Bqk<Sqn=p<
z4I8?Ap$~WG?Ic<Kn9oJ-1TIHz9TR?eWXu{jr|^GtyqOTg5P$A~!x(9DKh0GA{5iPH
z3?HboQ7_{lj>^coj|#4VPsGNKy|ONE#RpN&^pV(qUv(ZAENDt3`0x~_LT(*TsL}$S
z0(=XUBN>$7y`GpUR)K2}kHAkdNgOM0ySH+?o>ezbw{P>T8|7a9DD0y3u3={=0Y51S
z4J_w*H?1g47R28Da8j>-b1}>!>8Y!$+jFKsBW+xY;(!35-N69=Iz-67uw0FLzec#x
zb~(l$S7<vV8B9J!b4sQrqpGT^rmJgf=PUOyzqR_ViVbPl=geYzgeul8=eQd~n3JH#
z2W7GOw9Q)oVQKyt0*79a%3+=cXS<i_U3RDZO6Y8C$7wPvMWDyym+X$f21X8?>prAq
zD#&R{Nz#_?O?e%<Q%w%WMP9<zcXzD<#M;{0I)_csbbj};+4=e97SBtY^Q~TP|K~@*
zd0vdr*Lw^hXh$-$uGMRNMvK!sA~3Gl_0jzJO0Ml-{5x(Rs6+F?kMv_%{d;BPh-^9X
zkJ@zg)X07SfTBFPCrHFXpckOP3m+!@bf9>0Ts_V$%pxkWBqem%OR#EXWtA(?FNDkr
zK%{Legf~cRy<PL(CGi*uCd~iX=Ku0MS8cASZJyy;V!z%tSE!g3Hu&p1`_kPm1qky`
z>#ZLDNzJrTVB2-6eJTZJX98c})K3FcT=~xVS9er60F3juUzC-UvG-#S+s~uy7fS2b
ztg`&>Eq@cGE3LhMcbdN45iXIz=UU}DuRHH`eTXMwQ_+bCRH(OGm4TGD-Yj8NbdU>r
z1w*cq;)|8&gWxq}<W?~Jp<>OjO=?>`${pdcY+H|(GphzLV$0xnX9l8oR9z%tJ(-4F
z;RpvX1(tWvBcU$Be$wgw?M4tr@>23qHL2js<7KM0&CMW9RwB29`L1t7K0B7H&2C~u
z(JAeOTBz1ge*j(7hsOoum|p2415<TfSJeZ9Ny4vmg}zJfs`+e|=|iPX$ethL$<!lL
zZs6Zn9P_W=DGZ9sK9q;0gqQ})A;}=nsR#2dC1Z%T<poSX%S5oW_^glJth%p{l)mvX
zS>MZxTB654>miF$QJ4bH%2G0jK-Y>RW9_3BS^V#Y&t`oobo-L>Pk#29d-ec0XGB~+
z?{P9wmHKEYVhSh4DKI6~0I*|blKA(&J9h<!qLUGS!>XloKWs;4`{9Bk99G4Nq2EPf
z-xBA0>b*WZr)6F0(Ed0QCJXvS63_gL>Lx)d5d&24D%_%+GS}XdDDfgVpYo$N6lXe`
zZFcRpb_An)<o5Y^jQ=!}dj}`^LJP0BRE^kY<tUszN_u4UsG=J^f(f96ghrg`yThPA
z*yMJSM&>jCo>XA>AvZE+K4Ed``8t)FOhqqCR2b;WN$YuyAh1<KnwvFs7$abVlP4L2
z{!TNE{zYA?D!jcfXaT)}vO$}Wp%3HQrW@`32s+<>_VK`*m=QOacxkiPjQiN1lJtmn
z%*Hb_Y?}^#6ySVr%W#iwc>H}ObW%(;$@1<HCGi)!-d4g7q8Oa_J2_sD;)g5o$L{S9
z85yo~nvUn$OtyqUZadrG5}<T*DbU?-I!@v8>D){@N&@+vK}eyY!G*tZh-|ZbZx*Gt
zx2Lll4=~z4_eayl966uV&P()_G8jo^geRG^vf)B@K58~j{T8>>`twOf86cc|rR%<G
z+E4CXqU+F!u!+%(C(-Pp9Q*q2GmYlvn?M57YO~R=%Ucj2+;MIM^DB3|<AuuI&|=%F
zLF!HdQj2kT=i$fQ_w7Vg$`Y;R9fZv~H%>z*O-E%7qK4phXfI3Gc_>Pt)t3Pr>$z;a
zfM#msHPDxoO8>`g3M9fdq$S(>ReUEYg;H+h-c-UcKTLzCyK(<IhO!2#vTeYS)%A|O
zp9KPoU8V*jWGbeLCewq88SS+F#jnQLX{u699M5@oBsG$?t-M#&Wud~b?!1o#$pQH*
zDD7P!u6p+K`iC?gXkHOXfa}53yWcMBD?Y-EwQ)K+oDIm}`U`bE&jR@rRxmTI&UmAf
zef_E%@a>n6`ao@Ub%G5x!z)u+=<{v6{ljs!;@|=xi(3xTr;oL>P~*vOAYq6;;ScSm
zu!#}8LGFd8%IDm9VOGj<5$L52vMDK3Q556?H2-Nj+9GG^1us2aX1&zNvb4^WHSVTW
zXx%8=C6U<Hd^*b(6aa>D3UGoGfol{m(Ef_E`gK2kYCPrEA_08`JRz|J%Z_anHQABO
z9yu%ffH2@^wkuCFdsivroZ#f`Ic<9~5k0@VopY%kz2a&}!8i$IJ^#3IFEhf|buYuc
z?s`s}rR)!8%Y-as3d2u>-XJ&Oq0te-)>rf?FPFj?(?XVFsdT8r3HGdBpY({x2z?OF
zeu@^nDact>PW>C9Y%r?U7x;jYym8ZSx@Lclmt(<VUCJ*oo`j<RUR<(ZIGcze^n*xc
zdKt-6?zGGao^`-+n~e}QzdS$W$v4ecVOx9ywNedv1|9!tKCOc(L<YV|B4Bu`?r3bs
zJ2bHi2IH2dL=Y;9iP7)uOqK7Yz%8tB)qZ@4&T*8$)xg$7h|_(-x9GFCQOyWX*X90P
z?cpKno!nFg2mL7^B5ZPoT+(_>@@k@#*51oq_XC5G*F=gTj10+yJ1t+>j9I@t>#8w2
zaK%~bRo<v<!IYOEE)wctEEXhAG5IG-u3k3QG`<o4Mn%i!7ZM|D6S@1sUs@OWU+Soa
zM!)kWXiGu9ycw+$K~_)#$zjE71Uc|z<312>zzJBAI#5HT4af0mk#mW@DJd&>_9ezg
zek&uEYEhzAb$EoHe_<F*poFJj#9urowFq5_P3G{_VL*52%SUac@PlqTTt5zxop5pI
zpA+&kDN0|%_YK^Ym_z-Kb+zppO&jQ)<l$M-G`UGBS+gTa&_ymAq8&iU9bt~nfK-U$
zpf{@}wP?T~ZrD~p6*A4)rfM1H33zB+;8HG~&-Evn$3_4U;2Zl*HH_e+a9|?7)S0P`
z5r`a{z4h^8xIjARd)=8_e`pa+M}ix1D7y)UU<(!ba17re?Zb(^zcuWIsKPUk+$T4U
zY)AxPO|=~Yr&#S)ax3TvbyCVxOd<D6iYiOV#D`LNztfJb0}It|upX{9yW4z%hbU8c
zOeppg!a-Z~pD(@{gW^agVx^tpe_&j=o-A=)>_^5aMK2?~%<FkGd1NzuOqDXoBO%Pj
zVZ)Ev#B$!GH2Xd=i?D0>2EO0ca5t<{AlO7$ObR7e6O0DI44lfM>~%18Sh5r&3arYg
zAjQIrC}hsSm4Evbhw@Guj`=}Id$J<{&KP^3I*E;X<06NK0e;JvzE9#4lp_E#1mA^|
zVUj_*3#sl#=MVlCkog;kK?IBxNKgZnlDXWMhb^Rmbcm;8kx=UpQ%+zf=-n`a0G+Hh
zZmwWu3GzEi>d+t{Hcw4XD`X3OoaZW37{2IC!ZDFD#&kegDUHwQA{I(T(ouQ(*ZM3-
z3S80B{K`w<p%~{llEU`J!vHYAU`-=Wa*y@;HOO*FrHpM#fK6a~S|2UiX~k}V*g-O^
z5?zz}t5x5kzh+Zn++MdFsXGAB@pQYsE)hdcCQHh?;l1vAy9hI;h#xBqpwntH7J-<!
znP;Nh7gu2UMrvSoCGFH-!&2^*56^ojA%(0t=^CP**TK7VAz!ZpIEf{jw!2+6a(IlW
zh_Wh&rLKe&K5A@HM3CtW4u@te`pkENM4{|p17u7aG#5fPqmRe~Hj{`52a&ESF_<l+
zt!G`YKYdYNdC_c|c?0m}?AwkJw$p#PpEve5F5VJ72hxhFD0)x9_a$EEvAzw-C&lTa
z!>EwsX7SnXi;Ac_%N9O4h_Mp@=z461bb3cH)rG0{Gyr}%0vV#f9wJjgErDt%0XK<p
z%)a&?&<3bD-L1%ZDp1LpF|h+?6xd{A-BA+1b6UpBr?S5bj&(RW4x-_RNSeY2IOHr~
zI3m>Mza`yfL-YjFEhheWJ}AtJ9yAT<i1BT$VQeMq`Q3pLNP+LugC!a4BY<3)(IH!<
ztUx~Hfq8B9M&?L`d_SH>3``^?$IJ74Q{Nuad{rp?M91yUr~-?Si8?0$OSYr=$EX!E
zNqrHJTex^kY0)OXxoe?Q)@AWJ@4}3Zf+tS&o(B3tR81cEM!+UF)f>uBh3DboS0P1v
zll|pSasIoh=0;PKBzM6feN<mC)L70wE0(nVOlV<ggXZq^LI7CPm<&6C5L1V*Mj79`
zVpFQhH}E#v9LAAI!+^?}%JD6@=D#)%WxQ^V7Yhn7?85}uC&>L~uv8R?v{4=ycLW%!
zT8i`9f5(2;D80%T?D2kup;{v6<90vsg^lNpGMSV!cSp=~d{n8_1E;N25K`HywtcJV
zuvedg5nz(AKW$O)YC>%LJS7My`T_kF{8n^K)q%1ZD>^Uf<Eh_mGY~+-`-pP2?DueD
z`%Tvk1%a3HK#|NBh+v(Qft#!6s=>TI*ZHm+?@de>AO!D{@h&0ju_x2(usAk!76JK;
z<_m?sRKR;}N;O%cYrYzAK+$te9%||&(Or?T&)MCu{xi0M2y|?W6`hkf+@LF)7~<6x
z<9C&}pt3l>K;yXuhYO(KbFr|LIEZk1zvf{~`z1t{R!2Zc8dGr<-Lb$!!9)&_DEE64
z%v&Tz)aHlaK=a)}v}IWoTGE0d(j>oCUR|EYsqQ=|g-QW2z-A*~;y}Dk{17=>2bU6`
z+9n6^V%wBsC!9dk^)N8!zpl%o`#@uKK`%)J99Q0w=&9O#E`5i@ii`+B4(eU;xg5=*
z1a0UJEJ33eI*}-Jszg`b-8-;u31$=S#E0@NDWhXtL<Y%<^Crs@t-Y$3Gr_6Y?+_1s
zjbI0MEs=nBzzugRQI_ENVP;zghR^B=fT!dDp|s{W@1+?D6oUuD>Okm$SRX?e!!!Z}
zLV*<i1CojFC<$SzC(G3l(3MUk;ege$*pG$W<+L9$L5m=~BtrZ4jy5mD1gMnQCo58B
z9L-DJmm};8j|gl7j1~3|&<etI<H>9c+x{>iNZp64^X#|f#clhGuN=A0WcYi7!+p5Z
zGkj!LH6@}R06dzUIXZ@&kwz{&geYjce@a25hjI-u02s_(5-k|sf{wG4FrQNMMlmgg
zJ2FoIAK5U8QS#C3Fct>{zodi+X3)=-RY$ZGA+U#9$qgZcU<ZHWY$py0BeXi0AIK&F
zKbeUq>PIvjLWpYyPmGP3_>1k~)kbAaBQ5LEjI+`txgPRIMsRPCQy5?EyWNR5Xi!=J
z7|yikDg?uJ^8=A*aN#k`NRpI8Jy9KBNHnaZ1DeRpY!9(9Kbll(&}*mmeR&^Bj<my2
z-h%BXyj_KGHt`ljV`Aj}ny4YZ3T!No8Z9;!{{xjGvD|Y@aR?iM7%u(`5k;uOa!w{(
zgctIrg}MUjSTo%TFD|$RTORO{?1|``Q;E_eA;J4NUwmtL!nVM#<MP5CQ(q^cSLU)o
z1Utc!<eqOYY~-g9j%Mg{(Xz2S0{e5aULN-xy+c?oM2N)_#KJ0DBimJJ>ADAHjLj6P
zAr;7y<S&VQeAT3lUQXGY^B<7C$9VU83TtM>umhiwJG!}%sC-j!J;+=pJ`8J=i4<Tw
z;l-k9^3a~Qrb4~{G}4qU>lDxx>b_!qOlf()?!(bnh>Gb6*T?FB(l}w@NlY<pB0d#u
z8!JXkv>9cCi30$?`6vux$EMAYGgjbPp<_mcM`si~an$Y(@6*Ce6EUX-MVMRWAalH8
z5sK-)U;Is!Qb+qym@&B=lkG!`*oN}?B0(Y3khB40))=D&fS^>Ve8cGh#$kw3@!IMM
zchp5<L{=iiG2VEG%8;Zl!)ree-5|th!mgHQ1(Mc5hKI>)p=UTm2S^QcMTuYr;OeHL
zAb2m5{RW#cT<j}4a;GY`!J@h$B{ggIo3B9H;Sfbx!=K}sfN%jd*M2hh9x!C*Ou6qu
zTx4l;j*VQ1T3~Z@u4gBBnP7Vo-%|r&AQ*46d<vhzP}|_B%c|1A1Y}T_B}d6(-(Ywa
z`*^iz-~I%WJ9I?iz2<!)!f5jVOH%l{5E5=|vv6=HP>L!pv7hhD5>t^?5}b|p5hfln
zMe}q4d0rWVkx_Vf`e>0SSg|QbxW}WA-R=(xL#?Tfeq<o#k;@96_uzC>Rf>uj&a!e-
zL>-}R$BLncM<5S5cd$xpV208g+ttphRpu%s^Wp9go&UJ8N3#?#2?3C$@`P>566-cJ
z3|MJemf%B7T#GQ+eo63DVqbZJvz81X10adSILUesr+hdOAiSj}DrNO|=p}Vx{B;*(
zPp}RJK8MBKDmYJA)cKt$OE>)jl4hIS0#p48b_-S-ONXOFRp|zWa|NmQapidkzegTw
zGSi)u^K=t*E27&thm;qPv`jn~imszvA(za4O)7PqwL-{y0>05er(G&cfPe?O=!~y{
z%s7nCgn%kGAR*`pyp$lJu%<1uAzI8%EFxp5*<eTulw#CAH0)z!SFyo^^j4Ws-dje9
z&<<4q)Bq=o^F_vsnT~x#l}Ob+`Ha3rp-4Le@NCR}OzP%sa9=Jogl#82FcbI|Q~(S>
zm1?b@WVt)?Q1viP<B3o$B1jY2gaQPv0V8!GSf3=wiHx)-HXt8LfZ-@09{KItDt91v
zA-6W1Z&AM%C+%Z}-60@ZvtI`IO&d>Nc#Be;7WxV`tmb#Dj*JRYXH5Moh?%{)&yBPZ
zvbAw))fF3vI>0d&K_s8RfQ>CpCn`_i(IQ9yo+xWchWsM_&iN^BeMl-Yg^MwrMb%;5
zEMlV~FPa-UP=t1DYR?f40ZRx0E0@d^yWvgzLJ!RU<k=~2I{XQ(;*?D;7&Odh;GRQ*
zd<7<-S89bN6-s|8r<QU8lDcBLo`KDL4r5930+0@75ea@^22onbkSYnNV*}DLm@Bp5
z^97fIYj70r9Fe0)dD#_QMM5`Lu{w$eEJ^6blhQ)p_}KbbqMO_}tO)870#F?Q0e+Fv
za%846;TwuXEx_pW&A}nuip0*Ka4PC{i4Jk4QRd^f01);YfH#q?QgS!e29T5@i4O{3
zoMW!oXK15yeOtA}#{I+<pm8~?u1}WbQ-QIS?%Y)^4#0fsiMdJB2y20KJM^S;cCaIQ
zLJBFa6DRjz!6qG!jaR6_0iH6ba)RAbhEpEMEt!rv*=RdDA=l!@OBIRyxt~qwFzg{z
ziaJ7cHrjwl`_b;#C!Pcy*0hZZYmyg3%F_ig0(_Ddij94RnF1Y`dR=o3OB+9eMPfw~
zt5Bunh&YBQyf!M{Fh=v05op8ZvOXNdGZs2I62Y}476QbqWO+?NXt#&+?a!_@Bn_4t
ztf9=yh<0!1m~=M+1dcb)4D^3Qvc>5ei~Z&manx;GEyZte5l_7!G*U`58cf)28r1iz
zKHZ{$g?P_zV9pMIiNvt9F9N1Pq6$5;CCGQ$XGzhA7KxQQEk(exh4fLMk$66q9kSaR
z?3*T#FPPl61lj<erEy;MVC+c))UWjs)mPv8{DcRFEb5<&p)}Y*zqR;o{oW=9ql#dg
zR8|p|0E9p~iC<;4jIHIQJO>koXzT-=u0N5raeVu}Y~S8`r3dQJ;Lt|?BEoNi*AZJn
zpcqa<zP`2j$)dJX+!Fvq?Il(A*~t)$_G)|E|IQGm4p9R>p})gY@}=|`+WMqnP>}C9
z&4ZwtfbdC@FKU(rLFYPl$Ybm`9Rx2lj*<Yd-CgawvHM}G8#ua*>OU2dE=?4<%|g<8
z$?lK0FC!^O<odIaDPKrt`uRt?-O%F@NxS8CeZ>fH^s!EDOMGRL@WnPbviLhJ#Ik8!
zw+M6LGw*IN?;8V5+FVWSSW{2SKe<gw(<HG5i11+J-e+Q4*8fDFX)F-e<fC-Wg~fa+
z`EOU8w^^ErI-cgBm1M#hd3v@$Wt@ap&+8&P7x_(r(psmXhPw>xmmF`Lvv~dL`_Xuw
zzpM6%dOH|vGGFeU6}x_tkYYlu01STnu=~C=MLOkj@9~d}ct)_SXPm-a(PMkS+j1$-
zq(NGM98Un8M97~Fkqp#Nwp~t10Vb7zOl(t)yoa#VhuqGY)%fGz35sJriu5Re0)bj$
z%AvQcl~XU4^xwqqYILe_SmP-kH;@84)!Xl9J0kCKeU?IYz7{FH`$*>5US&q0@8fvP
z#CnA$*bH-pINW)2^<>+977K$u<o9wgy(lJ#;Ls_GC~VEJ-}PcTbW~)|R9NJ-IcCQ}
zW~3^c@y_$m{bc%BJR*rWsGZ-xJLHPJe`TQQCj<KY(U-6I#Zol$v)Rrxpz_t7E+;xi
zJ2desH<PnLO7WtBFb)%LKLCk5OuuS+ibB}W=VmK{g?U;6htg~d4h71o#*cNExb7bx
z`zA@;Gbv}jM6()t5Dd7Pl4W5^dW}ST669yti1|>=|F8%P-he*e?p5I^@PJ{Vdb^p|
zw6q9V)S$A7i^UiNPA=TrB`2`yW+JW2$KhEP^@?5EBrN4jh#g_NemF<FoJow(y+uu2
z=3${g<q-5YWjd#&vJ3o7034E;-}w0B5`i6JI~RxN#qaobddlAX(xg;phAaQ0*Ww#m
z>8&k;!#*v^bw;|*48lv@<sl8}^D8Ny%+^;*xG3OFb<{S*NB`1PmZ~BQLupJcL9&-l
z_r=)>tdPi)p&$89SD#vq4kUag#R)<p2FKt1&36pjhIa+Kcy55HL`)CX-Pe65QSQ&W
zF}BT%`l885D699PN!~Lz!(2C+cB)rEJ25fc{S$?hZ{DDc&Xs8slGR)w!A6nIwNP!y
z{mA%&+u7s#TWI6a&J56@`CScW3!5YV`u@>oM0_F=E&^@TB*iWE>N#>Uqb9a%>{1fz
z84s60T!zyS-6HH5>;8;=EnyrM4NGneK;dls9zw!9JZ~8E9%3Y>$}KVs3z(Q~62@(u
zv2X!47Ov}rMWi!zfq84uQqI;`U4Yr?R7H_sZhfGw2GX?n+7U=cw36l1!=taEOhAaT
zd)&$S^TTNjiCLjS#@4NCFoHI*tqNu_&H$z>sHtXeN@Q0-JT3HX2aciuR=WZGfDKtF
zxtGJuz#9yL025);?>7a@Gdf`f7#&gQ73#P^D|*lfkDM&>-rR}x*lXVrKuRT!!)EbD
za8t0+p9rjNEalkjrlzJd(1a~4bj|d1g>O)Rq;BOwb^aOR?sI>X-II`Z%5)yvC5DVa
zv_?zLH6XSIz7VK6E9txaQI_Qv<a_q~2u*qXUQM$|-h6^>`^vUd?URZvf_1e_+rqZC
zQd#5dPx_^Gt5$inxa#EZG=js554%fn`c*?0CQf>io#w8o^LOYw1-<6ITh7B@Q8Xz9
zN5VcwNALGX5K<&6kHMie9aO(3@AI?)y;*bioZP01S5&y#hktR2lq#%_wVTnP_dHbX
z{}^2BIU&b=4|W@7sy87)B~4Uqx?i^Cpl^2WbE&6o*J;>cva}t*Cphft((?Ufp?Syv
zFzy*xbx3OgrQfXf+<6ggVJ6)2Np$*|ZZ6dezh)>j%Gx>6-q{Zk()mi7z|(?!TswqQ
zEkjlzg+n?MX1Qlz?)z|qW^Rxm&mBIDpG@KZA-tAPgN;MT&QdM))6@uvEqPdOGBbr8
zsrM)S<*s+>Xo}D(Ea|9|etpkK!e*5(pT@p;v*!JMnW=ig>~8M+j<a2_&|;*LgV3Fu
z*jS_Ko@MI!XpbA3fE@#o*rb{>(fC(A*`T64mpe(<xZjG>_aF8H@s#@rw4r}M>ywnH
zi1-vdQ(qKWq#jHX+oHq-vjk#)M7MxEQxX}uYo(-i##%TZ=ozj%o6^|0#-Zd9w+;_i
z>n7<Kt0T7<!)`0Kd&i4=S=Qx+K@`Nb3!I26$z1hZ4YN)4oA_&eZO7HBReGl?HG1}Y
zIs3v&2d&Gv0uKn%Y7uR*E&-pZl{2mg3Z90gAK_MJ!F}*L$pT>;!*$R!cYD@!w_&tJ
z$cHCi>rwMUQh#Ocmkdu$=L8CLzoJUKnY#PI^jWX^UUC7uVrR29+n#{kj#>&EQmY2@
z-j0tC8iSj4e2Jh$;<&A;g8s`Hv7W<1ui0?ur%^7D9UE{!9%!RNA|&dpw!VT{HX5>*
zk#&7MC3v)0E6MG8m}Kak#m(rb2-;Y2(mn%|tU8fth}b#?!0Bum(ek;9k2f^Dcvbf4
z$;)&G4qfhNw}`+WyO@gAY%_VEZFHX7R4i?X#={BYM<6ULQKPdZHz2i_`m(>|9S@*L
z-u0ypOGFbTwVoYb{>kL>7~W#CE!GBbi|_^aaxnlSPfwO5_#5<^exSM&VS)j&Ksjk7
zzMU$KA!xo4%!@jQODA;^aDZiWY)3W9;Nj%}3_Qqxw0q>dK0%gel)mpQpEfXQxBIV`
zsNbd?2h#09pS8c?t(c0CiR9rOhz9t#Iv*$pT;taxEZw1bM?qeL{k`TymJs1<Iv5WQ
zuVFa~4L9g!C{nfu8V<GGK&H>dV7z#_P{Ror-ceTU`b+XXfDbu!`GbaX^URCw*pC-8
ztvMQdO%`EAcOpJU@5>N%BalPC!>E<?^wg~rqp$+cjb6+mwn?q^l9Oriete+3mZx3C
zqZQpLOM~T#n&<jXvaJ6(<dhh$p65YB{k$<`F#?ISzo0Uw;fkc8@=nitw1B|uh`*xn
zPqSp5YvGX18%2Hg^X4*DFvCpsV}w8m1Fg&%U>=UI=BQHZEi10rK2-$5=P4gIZquQ}
z5?EdrNROcfOW&B*xg1RG+&3}c|8lGCL;xg)RFw2d2&LH6BOdy673&Ud%j4o#4ZgT5
zbN2vSH=%h|`eb$PZX?+Wi*uPTOADKtH-kD^2<zpq%RU2#ub<(~FNiAiDt^e#qX0}h
zdq5GK?FVD#COT9a&jNY}0SvVkb!gNde6sPp*LU8wH#3ek`~M*jwr1oEuGZ5WEQMIR
zq_2}aZfy{Jp>8*D09#%%IHv2X;g6)7KQ(>U+KE>zQ9Q!t_j%Z?TOSa*+1+MYOp$+I
zQLpc{<WxGUwmE;^fWvDl19kN($TwpEr{Th_Gi?|pVhH+(3hsKNmb%@px-VvW|FK(+
zBsHD3Z(dapy88`PDe?Z(x_q<Z9kUUn0FT63)^9gi@cLWO39S$J)DYavhmv7Mc~^Pd
z{?aj1#1x;9Ae&P1ho{xypBH}ommMbsRi(XNpE<SGeL9=Ce5{P$lbGPRE%#U*F4<&}
zxmEL*x6hR{4)$A|7jJ9xFzu$x%e|fF7M}cCIgj~014*&gE3?B>wDIMrZohcTHnPer
z>$imUm%Mu0tG?0C7oj+AcjGK|og}sfFC3e!=}&#uZkq@M3xT%;3p+2T>?AFN5|ghp
z{Z4NEBZlDUx5EJ`EG@V%*rjCIJ6q#oV;lr?pFdOP6NJ<@&hiPjmxy!ge=@DDl`U~j
zQj}VIz)fDzYBW2la;Zc+onKZUeZTbOdTcS@KGRB=?~dpF1E2W`POy>>!D131Unfa1
z@g-CN&CYS<rx>DsM80+lMvn>nM6?k8*OCF{lUY@w7$#5cvn3n;heUggm(10Z@8RYP
z9ezg(*YmpOmuu<vg;|bYTo2}EX*!umw;e8UdVa2?_}qs1@b-F;8)=78GkbeJ-icz(
z7;(#cJ4h_x2SK0ro4n81gW+-8M>W?zlsTvzorJkOxy0FKjvqrS^K8pIS5GkBKldrD
zxKmW$Q(J3KS<K?~W=*i$Pbb^gBGxy}=|rf0_FCJX8^X7CN_SD8sHbB5#r3=B%HIjH
zy3deP)_H+&I-OR%_xxBv);iBaQoZBQysh3|g%vbcU)$pQvbK5xQ&9NoAbuJaFCi2g
z5><gn=+_VRGB@#rImTaUD2no+m%&tcA9S(Ud@S+FezzT6Ro^4d&)#nNluc>r9E^?S
z*2B$P9#9?4>R4~P6I&uh5gU{XoWJLHd6-PT6&%63B%<>}s;g`?P)+J>moEBUTvG}y
z;Gt$d^=Z1VibRQG(*=Eed#XL#I<I5uZNt;??7q^*?Y;Y^?lkrTw`12g+edWm#ZBYT
z#pzpND~z#*>5D(|z0tq%#~M8MM&EpvU%OTRT66?Su3Q-x8&D(X%dZMI(X5heG|3^f
z_O?Z;??fwRQa{0;9c)s)b%CV&9$D9n-Qgc4-w8E1WZE`=5`M_a;I6*)UHnu1M5`^}
zU*<maptgeliZ9Yox+f`>A~til@@?9x(drgG`wbGs)B|JMZKW>vj==IyZ36y>ndy@L
zDFnCQ0|9Px;N?Z2{-H4mcdIo?ZHqmB$#QSqp{3g{N`K1iT>l&n4z4yJq31ov_AqBO
zFRjuVTZp09udiIMcO2t{_zA$&TES(!hq9>7bz@CO4;QYjWDqrdF9G%4$DUs$oehU%
z4fscg!%gn8K~ekj-O;Pg4NP7SWXsm+Salnti-whrYUq3tW4sF|7>^b1tPIA}*Nc~M
zhoyy?HR1Y#T@t9|2JdxT0?<xWZ2M1}LNYk*B$q9_YfJUDOVI|nw90=dmbx3pT{AM)
zJoVdHs<z?D^Ip2FPx$5<V>o1z`q2Jn062JBorEnkA%7zALPBPUM&VT0E@G*&D5M&o
z0|$Hmz?ueMwptHwc1N|}XjNF`EIU?fSDYp!wQ2AA3Lp1O^(7265`3~hYKW*0_jac_
z5uCEZXRd^ETkFFg^IVm@P+4Zmh$`)RKbt%k$i+RAR_#8_v@oJ=U;V~yWeuIAIZu%P
zsow3ZPw=>=wZ6vKo!F?`3reov-r>bPtEH-2>Uy!Wj>hq;y#7yFCxl$rcA?MrWWK#=
zZp~|3RYAyll)pl?SCLGqsw&Vv>6>*k<IdUH@-#ysRXjtE#-l=622F|$b_0K$lUSFj
zp?Q(7e_0f1MI0Hs5#&U;q5j%NZ~t}EB3kZ-$U}U2i4#rkpqJZ`v1=`Y^<ho2@9}17
zQ=qQ<y6l{-lK#WC%D9GWR;};iefYrc-kR7p4aKsnx}M?m4~5zvibs+9q6@AIA|yf{
zf=8;8Cb~`tzwGQPtg?>jgRg?ZOY@5-)n(<=@mAhg9L$Ug4Z7Ce(t9uBwR^8Lp)HR5
z@xQs-SU+y_#*1#gz4-B`n<HVkn;?|=+-ZZFvWo7Pp(O5g$?XlbM>5eLc@!O*ZwSH(
z3H7f`ii^r?b-C9^=G>JOui)~{r~Bu6X~6Tl>Ea>FHRB)g>JA2fmh`1va?NdQ_?d9s
znAxVUKEf=s8+`2rU5wEhpIe2Swe<337M8}5KP@}&H;rsJym!&H?QFWakIi*oxvHrY
z)sNXNa<wTqbUS=q)<NfvZ-K)%wIlU8+(b{uYr3jxEX_D6zROxF9UrSLu3tCsCU=N6
z#UnKlN`3Tq_u^9vcVP*QD-Af(KE@#BQLw^IA~)it@x(g$y0I;iFt2{rSl|Jtj-6Wl
zb>tP(sG5rE<4+%w_bm3T2MycD0qJ&i)qVEXN2b?my6p>mcV9F$Pwc#Yt=p|c6kUi7
zC)j<@D4nAztZZ`Dm~}q&vuXGLqq`lWR8L-;BzU>PFgH4#esg5fY{xN!cztMu7xlU{
z*Rt}uWK0up+t`&^J#4os_njTX?ckhQz0W#6Jy}KHec-J5?A(em*+Y?vV)OnVNv8J}
zg5DN$Bsnn@xNF7L!x}AbE7KF<Uhg>ZKD;b$4wBKuZhVFPI}#u*uJEx;)FALL{a>m4
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&gtm.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&amp;d=mm&amp;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
zcmXtfby$=C_cz_GfRu!Uun|r|S_w&M#zr|{bV!RJ9TI}nMhOUt0vk9+NQi7mcgO^#
zOKCwsde1)J-}U^l>yC5I>%@KDan5}&#mq#HnSqyqjEs!gKwrm#jEn;E-;a)xbSI_R
zW0!QGa)0pX0U24{E5-{aYSJ}%kcFNWS?vh_1{oP8nVGSbE|EyI3%ekCh7q^@iPK8N
z-WRhI!(`i^sRl18zY!_-E{P|R#D9^*YSY6Z$<sEq(?{Bkjg9_(5eJxO2U~tB3TDdk
zrdz+(<N$g!WTHx-M^u9s3UWs3N)|G=bwSbws*2|KRjoButTdD@iBcv9Z`^lZI};@z
z{Vn&nD`WWYz0c7*ub;vXi2&cdV)%Hv-F~U7TK);B?2>G&bGr~mIebN&Rv^YzomD<L
zzq}N|{V+|q*lP?S&KnYU106yyiN4RM$poo)KOY_(oEU5W>xd@KYR`WgGatee2a;Ln
zZ=YG{5}Trl2hWJVou)?y{(e^<?e7ubkm~KkU)8!E_Q_J7U#j1;Bvu(KN+?i{U7b4{
zjE;P}J-l?*leDqA^shC{%GA|B*M8~jvbCl8@R#eKOXBsNmY=zgwP&uxzg?Z|1`>k<
zu8mzT6nhZ!Ly0>+S_Q<8&u#ZAR{o~u5WlPMY;BGHC9Wx2UEvZAs{^Rjh(uUm(_uRC
zIO@{>G5bufr&}o1!d2rw(Fy7kVq@X7Kor~Sn3<l<-@LlNJ~^-#fAIoFxpsAI;}f+;
zjCr26iA}KoGk%KKdKMJ7zA*nfz+qlgU$B2P^+i_Y`+6zS`-{_)#%Twy_p&ysf)6&l
zPil?1`}S40tMhW-l&82R954L(7kfIU@UZZ(qrLmtZdJ$7)kTV?c>RUOJ&TFA!A*6~
zR%WNm-&7hZsrQ}l6JJCu_q4hiKKyX{yR`1oai@ehueANS=(nsdvBi!!<aIR%hR2>^
zY8r`)!St(mVtLG$9G{fgIRE6IN%`INep&YSY)(eScnN>lG!I+vdE$RMOvw8oox|2v
ze-SmqiQ3T3&8KPZRwYg8N9!=+NAS!~gB*p&S3U)Z^~$4Xi47Y_if_c0PhWP8w26?k
zrWpGz)W^?N)__kl^KnIkT}ATs%ZbHTvug<>IBQ5O@?$wHyuF%u+oWQ_Rcvn)UxPXn
zHyX>WV%s~mL(kExol~h0g>_d5o)BZ-i_7ZNUNSNvG6S6lR$)JOis_$Q={6B_<huq%
z;|zwh^o7!Hr#)C#r_(9LQQb+(dh{(uL{vZ`AC^1rWN?*A)5&ooQI4D$^tJL0-R-s*
z4Rak=osv<3U&<M68Cwx=-_~CeiKA`jHElLi4z1N~EM=2(24~>nvt#8B73+VY78Ys{
zZ9Pj_y|yjA)oF`g?-gZG`pyp%tec&5uS1O-e*S29nJ&pZo(jYwJLQqOHPd=1S2GB^
zHo>BgpeW<)!e?Yhm}dO3Tb>M<2Y;(yN=Ha*;Zo_aNRh^;(%JyUWiQ>JkB(MZjo0hi
z9|;(Hb;G2RQ>};kZByrAiVv6^>=lkW>)L)Vr&gV0)<pTr8n>l^YQvAbc0FK}CZWx#
zl2D`lqM<mj{!(>a9(P-sVr{|%C8Moy^0DL19huE$4jr{3K@RIykpy(bJl}8}_|1}+
zudL>_%vtlYt{O^>O`z8KKEa~Yc9`oKom2`3>3qR<c%XvHgvR9|!9ufWIG3w`Ny-X~
zJo~vV4xT)i;sqZb{M;?i0yuvC=$c3?XdPimav-}=J|<KN#Jp$6yV~qsDGH#geHe)T
zvuMfdvwBaZpCJh_4^cT3V-DmOhVO_b05V)Q#_B`lgGiS(8s~cn{@r!KzpWi>7Uk0v
zpn^J~*`1uGTtAz(t8NbjbY&i0Ui2wNOC*wFD2Mg;h2HJW(k4V?>BH5P?eCPW#eWuw
zMemvZh1CcrlaO7*fOdmW$adck9(Esv2lo3tqH1nOsr=ZhC|jy6%JODsPU(+W^<#L=
zEB#}2bNf5=ub`Y_FVIimm?&*7o6iaEs-9}bv@Rxuvr`b{Lx)5fKzynF5v|K30xf%Y
zC`S+Ht-+tca!v4>k`HkqXL|_&-Grxd-~fGLBSy%GFhJbC?ns~#M9F01lyh{cMuvWp
zykdA;RW8te+4@#*mL4I3eT<OP%Xy2j9>{A)vZ{#%tw0snozp$Q^2MK19I6^(ue)9&
zo(TXa{7Xaq={q~;RfiCCCxn_?Y5E0$d}m*+J>WG;{+tE>)SvCAb_0pc3~4|YT&m9e
zt!zM(|8HN78;VfWBm081cXgxjB!PbG+we#j%^*Zn?3Uvl>_vaPaMsb~b4JWz(SkvW
z%}Zc?&Eh?+{%~1m*Dd<B)D@K*#w1JRp$nx=RNl-f&oZ-Izu9;zXINoFAEJE~3ib`{
zv)pw03HX4n?2sQcXjZy(8z1g;x50ZE5G>&*$ugpPmHj@vt~mP2pHm3xy^YIGeWw%H
zeVm)xR9SE<4?WdnpHj3y(j}4R8&dgX`CefE8SW;!&m^#Axw%K@@vP^c6x98`Gyfws
zT8zoHA?r?AJ}`RmKej*Z$vHI=`6wM({KvI>asA=XN^U_GGKZ|4AAc{4U(pvIREFt_
zpbXYiS2&(}{T@w_lfxF8w#6KgkJ|@4N(sM2pNVJODnJ*@{4dM}sDxr(#gkFQM|k^1
zIv*s9RYSA@rBlpXyLhj>zjX+K>ie9RvMzP!sY<Xv|2RCdxkmuq7Xc4KB%_iB3zf0`
zw#<0M6Jc+-*@*r<a=~QWK@OT#Glm?1&GD(_Fu~c#2lCIr+tmaa&`%u2i%>c!9LerZ
zQnV@Dx9ERK)k*!q(*ryD!cXNzAq&s-@7bg@B#P_Du3dww-oi8$`qzdPbW1^2GedZJ
zfv<EYvV>1W%&VcKSO;SX+CijPgEs8N3>8pcQf`%?75>0<=g%|!YdI>`$NB=^<urzC
zP(VIB7B5D1RVtG_*oQ~5J*X@03PR9D)Nd9kFZZ|Zy62d02Lnf*K75q4?-*3+v3hU0
z-z%z-HV#3|cwW1#$rI|&Pfc=xlN@dHSX`Y|{62_DfjwMk3mfQB``%IS!DkMJKb$~z
z()_Up>zC?y$x^$l`k#;(96tawj#U8BL?y4JjU|-Q?f19(dBsp{73QA^M-9FM+{?I$
zeFNtz!SV9k((KwQTmoghO-8c{|KF{<nq9v%){?|Cq_B=rQx335eNLNzaFuD>jJGe*
zRS)RUS#`nMYMcLbhxvWsEqy>>Y{(<ycD7e-27JmHirCk#Tu2hIi)`29JKj9K<9f)P
zp-v7+-Fm8bhSKFtqqPiE!V8uuAV0~%W0Pd1%Xxf&e737>y+0K}pW`*#<FocJ1#feJ
zss)L+Fv*KjBO^0Vd_ZottMvakw4Sq>9{tnh*OP`KL5$k4tWIlt1V68GYCkp;dV|7S
zR9PmuH2W*bqfGQvYI}Iqc+`ihms+*Uza}1Xrt>GlcV2(Y?>4Beu6h3obwUr-p$0;*
z_O<&Np***+&8c}(p1RlcgrS%ZTwnAAZTLUMQKKPQ)RFs1&%TfMT0i$05|M>H$UFjF
zOt}%v`mF5}fE1KSRp_4ZYp0Hq)kx4j3QJeS(V4ZjqWhp$xc(df!KIQzhrKgp7?y(t
z-ex5nmz-rzjrEP|5k}|=Yu;x7&b*-l{CWb=@59<uTSac0&E*<!g@D7XqX$$|KG{nO
zqEDl!Eg`}=jW-KWeKX(9xjt5YbX5ramX&DM87Sk%KEgRA<vrdp<}Rq?zioG>az@vE
zj{Rcte#B&?m%@9#{xBqjyPZ5u<B4X3N}T)S30gw^w-U@>s>qR%<i#HbTv#o;;WAlR
z`#n}Z^yJ~uv9}@qhweheNfF%_^L(a_&x^j)krR=YU1{z5c29dX9()KkeW!D~cH1nE
zsk8#SeE%`-475B9%74y^->ixtmK^q3!*7Q4|M3=|)9zz*kDvw|Fo#H`X`Pxl{Kq+`
zI8NA*$PbnXmhLqhDwpP&u!;Oovw5|x#IE_W)tSrppnWMzaMG2BG#eH~XJey?@z~6e
z)yErH+Fz%X;MHI;SM?7*9Sdi7e`6KcJGPZ_k1m8;Qz1bc2fHQ<&8b5XnYFba-vO>!
ztj|tf#d1Qmp?xa)*C42kgPmDT`|Z+p+x|c&SV1OMX@`fk{5f4i{bekO)4#_sbv==F
zoQA+-iahU{`bJx|b^ZWJPuZ}5kdU%*M}PRB5>AtN%&plhMHEO>{~*DAvy2@*U~?@O
zbyupYKXJ=5SXNWvaA@kWRMob!^k1zX)o(YyjRBz1Z*l-$Uhniq-h5Nz61bAfBV>H9
zH`ezbkL{rsc4*1`p;Y^!TwA%_-rU0fUKmaHF}FQ-p!8kycZAhznq#(M*b<k(Z=n2`
z_4CIDjcNO-ENjtat&>)(o#CwxFRg=bM>l5gnoOEK*9@fDfj@fmMvGFn`>9tNGa^+z
z#nHozh$M^%3P+O{TBImE9aftf`*aI+%x5?*@)$0FewT})QqPMkv@X7tGE7?ji}%p+
z#?D#8oHcOvj_P{QcuToFU$zW(lgB2w2RH$M>fNx(&DK336ucmvxP84vVjks8zmw*Z
zHHB*~N1&&4($MiQ0k-u^1L5Lz9*e18@^yn#g4I`2ZL#{`Jx&0R%{Mpg>?u`i_v<tx
zoUV7g#U^(f{B^mZ2r5&?S6vD=F6+HYP}+jff3bj<gRO#F=?@4y#_i`Y)QU2z$?jal
z`D$1OlxpvF0p9{?wd)R26n$zt&9-Onl->P4G3AcrA<p`FFVNYvA^P@JOR6`P1%%OB
z_qqyYM$cQWG|`xDH~2@2_$L~0G2cm>_FNiBSd@zD7YVVQHZ!2KaWNb2B8A}~?PZxT
zU#*+_Z&>`%W<{UddaBKz-?G|xPJ|7IiuAj(A9CDB*^z7Q(!Q#jA=)0zazE|0l(Hu3
zsM5m<#^>8Fg}kK%xU)qY=I{4^S(RX~jkf;M{z(u%9{9jjYm2#I+xLDmwou)M4vw%4
za!}O5m%BZo+@2B|EN+eyM_pLkHj6Z5>W(M<Yxx+SVKW9F51z9FF+$}X20wDR1^(`_
z-a|F@_6KKfYjIh-TUfQ4vV8g%K#dwbzE{8^l?Vj)Fhm75x3f|~{NR_dwWALT25}7b
zoqz4|F>Cr<x>$#d6|~0Y;Q3$HwG8_Qu~WSUO`{dVVn<A9*!QP8wTrmTYo>x9wc#7Z
zoviNIoIe~knXsc2+L;mDLB!fvEC7Nz>l*EK=75HO_*-uR6o0{BGX^^<i&D`K-YA}6
z9l!I4#kzJ8zo~s5oauo9m$D1OkMLwD)}6@**?2AJIR5+{dH|*YM;%NB8r7PS)XfHu
z8GSS-rs`nK2yaR|j=p~uZZo(5jPD*nJ58nYm{%F-(T|VJ9Gy3Fh@0LkUo0Xbg*Qv*
zB`>CI=seh)865VH{{Go}`!SnZJJb^E?4lmq_%}4?a=Qb*70(DReJm*(@Z;jZQHmAu
zse0}U-HeM%qNcV#A+araWizGj4{WaJB{iYuD&`1Qh+i+h{8{gM&Zz;3%qXt;A^Mg5
zX2}*Kq`%Z9HiW&iPtAxIYAX6F(KMkS0`nvvyaqwA^5G|9#)1;*xb73wR)qcj(V`z~
zzM=$!KL2ih>T@82UFKwv=;)!`Vvok1r3Z{na`H!cFEVffV}L7nCQ1&e(RCzng=288
z=Ctk&oBqBGt)Pka{x31Eh6&Hb8!~Ku!#v?UL1i!Cba9B+7iuh!KOmzM$~f%OwcD>}
zRk;|^1CP%s2(t=Ju!3eSS|hQ+T*m#JvYY6Se{hChuC1|#W?laXQzp;lu*LC`TzRik
z>DF0#v`>zHd`Xbuc9zgqhj<7ZQ8HQ-_eW#WL`l1_XIJ0zVX@?lg1{gVD@tSstm4Bd
zf{7V6mr6^Rwga$V#U%TjP%%iT$U4yieK6}9{9KTA`{W`L3tn7-5|Y{a_%hz1s|#??
zM8lNi`7;MxC(Yn%x<=))4j6P*YY6T^=Dl4L2E(5kpOYB<slWEO_vgbL^0#RrTq$zC
z7WZKVLBehz`G>&VOzJplYl*2Vp`MvP^r9vu9dz92v<tF9DR!@Jno>NrFEOltjEZn8
zABO*CfG5T9;pey|ozhV@+?m=8D+b6>hNS;W#t7gk#A*Hhd=p5w^pT`<pOs(}72}Ga
zYc&3?1Od0m?JOaf&_WhV#nV+|v>4zul2jz^AP7FUO9|=7AX?oh2_w#`Lcl3(_AxBf
z=!W7u*Y}>5U*PN8Dy5X3bJhpOyNXbO%JyK;b*+~LW$Zwz9g~0-@|OE&bZ)VSTCb=r
zwsh#=T10#y{8`sefO=daROr!r^!@5?U~_s@o$W-ONy2^cLqXt{ee!FjOX!3_lHEj0
z-WxH2L|~u5yE<q>)I@mZWIWZN3b)88leR;`7dhpEH#^K0iV1Ut{As>-6;s%T63Am*
ziy6(`lgj*xPG8@yeV4CrY+|KXrhH<;3Y#lgFQlg=8x-dj5&vqYbQW1+{OzG;7P{_f
z`G8nga8ifDj5vE-P^S=1<>xwvRWq5HYn}iPb2@$&2!a;PC+0}Lp|yj8)F@TqWwEY#
zbRh+DbQqsNrysob7&+7TF(1vI>+;%Y4YjgyvVSWO*xh&>nj+_q*$x!808!z!)Ll4F
z4?o(Kiv8)*N|3u$=7Nl_{0}Cm^F9tcnCR&VsKaS#Jhi7_EISAR1lS8Z`mX=Ad!}7m
z@;D6T{PZl7?uZ<~hMCx5X@Af0;d|dy+b?rsb$nM^T;{W?KEt0nHz*)YEo?5sa@SS+
za0jpHm<#0CFxx>+yan8Dw+@z@bR08&YOwQCASoe4Cq)QGyy7&A=_}(NClm1FU9B)o
z)8&W$tA$b_Ja#luM_e1EdH>Cq?DskzLkY*QOTB-Z#8>lIe@)xl<B#NG`!k1LsZ~8T
zuoRJ}0ZOD#T}B_-U-H<x%#1RsJH(3D;Y9vSc0}c@GeU@Ex3)^7leqU-MAEw8`s=*|
zSx-akUg&rXBxKZU$?;Y1GcW*O*e6?wGxzpg2pKQe_U`1;9WjpWuF)vCk^eVu=Q55z
z%>iNbOW6zWmN7yM6)%33M!bz(yMfg=N=k?lKh!=H)w%=&^C_xwnekz3l#q8~U*q9%
zAqgcq9wQ06h^HEE8!d4ZgLk;gec#Z3(XcfYha8b)g2aPq(_TTNH`7@N@8rF*mj-A+
zc&|4S|LIYO5Zi6)7Eu4L_->->1%5uTDhLjtE`V7NiTxh_l}{%PBC*)C=le9|*a*k0
z<uj%jCM6*2lBM9v5?X1-zcU#g!Haba5@lL4-@)~PkS$Mxgbnw%F|MNCTh{t8<xxh1
zANPY2tT4${O7}+Tr0<r!4f~!I!tv;HTQV?Pag1M-6KJu?jF3qgle(rd%0P}aIethz
zD8`+g!?a~Uot7K^bws`cKhgK&2OkgclfAwn=(XJgDF`RRN>s}zWewb$-LEpkC-8qH
z`(hnZ?V=T+YJv-t&P;_DZ>Lit?PNqnd1@uNfg<k{P2W>fAny|h^AK3ex)vyVNqaR;
zx3j^&!cN54h**HQ%-e#h*i?nkL}0E44;m+{^pj}&ski8uQ~W2o*N|?sgn7Low@>dT
zd(SFfwIrbz*cMx80`V$0&Xr2GUit^J^3^j#A_Pxc=Ha#IKJ2p{qhC3tOg7nroa8^}
z=QxA~YlZL>6Z4LIwZJiK#Qx1*`-!E(eAxyL^qkAb`8mV4O-ln*NE73o#+3mb<mI4j
zzG)cfc`_VxQ$&S5qh&f4wWGK+kk5Q%zfVICesz#0!CuVtDw7HPa_Zc0+rQ!!#HK)I
z67wAih#U)4i>sdqzt=?3h%JF*oIh9A_ek11*s{<Qtijx5Gv0#;84qQ_@{8qQ=bWVh
zhHQMQ@6Mbs`}?*802vyEmX*HcrtMuD^JXnPxBs2Ec6noj&(wK5>&gqjBbOP+29J;G
zHoVYU*pa`P?VU$StXa$iZ5{E>{<U4o`LB}pDH4|3jlT?a8JF*|JOCj3{|L>%1VrW7
zM>?*%HAhS*pisLuK1tzwR~n&kJb#~4_>DF=#Gt7wb!nskak6Phz9nT;JJNvFP~^S2
zYu2PtGmS8?kzn_$Qz`4Ll~-9`4uoKUEh>{eyPr&6WcF@4DXGu)i*h-Mcz>V`5i4+I
zQkk3wuH85s-_9kFHoWX&Sn!WZKv?Yndkfa&#h>2#f}1@al*}6(0JrZ)Z31t<?J^+m
z+92V=F;gyhcwn~hJ_q2Th_}QQe2fdoH?wODR-O=+j{hIlE$q#PLMD;)IvzA?Bmr~&
z@qhx^IH5(H{;iV<xx)?(`W|LsgM@8NE?&M-&Poio0#tCugEj_e4)Ce?iU&jAG3rTb
zI2z2M{mzb(MLq5Dy?5G&E4EZM5;I!D?1PD{;Z`<Wu#NJGm+hCqp>vOp;Z8BuQ5*UB
z5?^o0$8a8(pbfwN2s*pNgg%ihtnumCP*I0m%Cs$Hpm!j>iqth@IZo=#Fa@g~dG?XV
zG1qEkO62=Zniig{rfxl*VdA6jh%|u53O)d=!ka-U40Zxvb?$8}2crEEB^v$j!$XL!
zm&QGj-j<0AUqmB0+{O%FIgxUZ1#>giLFDywNigrrciu1_RQW>SC2;#6fm8Y>`cN#V
z&iTEDN8<Uj+q4^GfN%ATc%A$V&f0MP6;Crf$V%7!;!A1cPMxTC+o1(y=k|B%8o8V$
zdzEIxYKTCQPBN!tmwaWMYjx9J<5Kkkr4lqtEEe&F3Lt=tm#|agU!Ir_H^edA;ijlC
z|138iKYE`RVlyl^23k>3#hgW|el2H^jYpK+gf3cpCgwA}8lxcKZ-{pGLnvDo^R?p0
zkk7`S^-wm!92CDg-x?0xS<6@&V!^-Rv<1B@+rD|wqQYAK<k#KG<Az{nVA?Q~2dsET
zj}o9RAbU4Y(DHlOI@b8cTl-4KR#sX2eV0n7OpSi893~Nn`xOJ3cmEBvq}MAWi5IU)
zdMOEbvujKFMuT^@<~D>Ncb}7OZHO%zEqjLfDm}W_kI61EzF{HroMQ)0Z+Y|E12S@g
z3%76_LWAa$XO8x39*bQ1Q~NNdKcRbHEt)skIUujZBpzSqfDHH*{?ztgN!0V8@HP+p
zb1XIzs_`6i^IFC;a|o=Tak41x=}NtP0K#fNWRXQVrLmY)>G!^S>v)|PQa%xW(v7=3
zp|XaF?J!)VA2Y9C-B82m)b_-|shN@Q8on^`qjiI0r`Vp0ypHyKHHOPxo^la_;^W0=
zYTo25edi30MO^onQA@F&>7h27urd1R$I(g9EsGVqT_Z*=@zo(WfYV>*`SGW`@HGZ<
zU<&Fz>f@JIgEZ(8DQN?6{g@I(j8qA;JnUHyi7d$~(|+b9Kq5}P?frINoABM>+sw6n
z3a-AXDVsDEfU+O%hpr$bZJFwSNSv0N&;W8mJ?CL8r-vj!4fE2z|ISwV3E5VPD1)z!
zT8!(uVG4Agj8LEEK?Tr1y-5by*n`9#C9{=W>Gn=dX}0S7#BoAK-<eaBG+F()794x@
z(pBo>jwxZfHyCzlU+Jdq##!g4mS@5VY5Prux+=#3=`bbrTzlf!C>gFLX$69+Q5+dS
zPIlt<oUS)NPp-qdCdAXz)Gm+j5Pqq@KEQzHNizP;3i(dG-rblRh-i4pI6y%*2;xqq
zwh(|?+-#_F;Q^JI!l>7})@f|<)gJHY(PA#!$Y3&TZkQ`QL3P6_woxR-cI%Clv-Gnc
ze(biwTY9`UU>MI`;Tf2MY&kbN$*mA)7}3K5G!Zu%jwis>^{l(R&~LcW?;7P}5gPqb
zZ%g$Fy0)LO6r^mkiq#FkG04EFDUr_{E8`RndR;0eMqQ3o^&b_GiZ$Mx$|jPOtBfnT
zgk>^3J#r{&^!%m4hJ0+}OFztJktc<BHYKEdBz$NISo~qqlOpXPhSRE#fevUX^Q{<j
z<|5<>jX7enhDpB_AoYAxaiBFV0m!UNhP#$&IX!Tb5`146a2q4u9v``r^kI^eusoMA
zYS5hoT5o)JlN&km4!1~*YZm=v@3f#=6U^M<D+37rAl^D^h(fSs%<pJ5Xd3p&P_Ism
zyZ1W!9vuXq0QA7fnCR7u?ZM)X4mlbqAK9{LliXPDRB@&y#2F;Rc=AG`o<s!vY?m2S
z_M?eFObFp@uM5Hy<hvPw`xLt#ZbOL+KVlmH8Os)!C8uX{573jL@6kgZBmnPW1|&WR
z$Ggs+X?#7Pq<XnO5NPsSs(!$Q68yJ3j2u-iDGoyj8uiMpaM2FtH+~OsiGKnbjK+XP
zyVIr9=plU+gKk^rpK1leoPTWZz8yLcM4z3I1FG)Oz?|rSMLSUotpN%v1@dTZd>?QD
zZ_B4=FDC89B8cvX#QV0)?b*54{s9TEx*{%V(&meIky75ezhMGKz5LsE)@#cCMWY0M
zq@tdRFWvNc@EaB)+Ko8<97$@FQya<ks?2T5W9~+O{4vkt-ufi;MbjNdEgDpv@E6>{
zGpAloQh(Srhta{OCuo}14x|jnAiH^NG;9p!a8ji&1+>vkU)rWsjsCE%OVwXcqwYxV
zqHpP723}P}$PL>6hL485nQkmxlO>HqR^a1N#}IOFJclf-;_Z6pFExSTio!Jj#5-qs
zj4P1_NgFFB>D6VNzrNuiGX>PddwC`6VJ^PyWxx=o$2|z^^lx{rg{#ljVQ{uwdG@DO
z3&l7P1G>SzR;Tf4=6XV(Y;=Y2Q<)Zd{{NooH)J9Op`vHY@$wL8)y72+eEIz`#pB@v
zR`mK=81-PsSsNvUvF8Q_K{l)R5^dxr6m#@j?DxlLSKeTSK~0QG_A=r5&x&m_WLX^I
znCYy!G=%V$4(5=yf2OG*u6@qxzt4>BNjjk({N#+3hOG56SvLIg@3};miomsAf7je%
z`JDr}pg=t{w@|Zl!NGW_xlBZK1`}U73oN1mPTb6w6yCn}L2KVr#zRR&unJgY^%kKq
z)=g`PE{U1lGwa|!-pe>OXp8PT`n2bWW60@6DfdV-)nB>}`5uDHgE-D#DPx}s$`l~)
z#k7WWl0_B-yEQr|{Xv6*|JgqOynx3x-c`l(if7yW1q<}Mvmid7$rt%Hk{lpoQpNh#
z*oz*yu}Uw;esz5chI(5`BdWc^>mqs^v;0YZ^C_r-0yTRZGeJW>c|K^)><9g2xcYqx
z*3s3_7X}m}Dd6aQ4!PSvHFyJ4G8ueiD!Z5B)o4bJqCO4L^R8(nOfUE2V;ajv?%)oV
zUJKm7#OQ?e537$ed-XE)Y|T5BGR2dls)QxY(YKf|wN$zHdQSd*<`98RIe+$J6sj+w
zr$p=0e?>ekpe82-;i$F)`7y9S;gPN5&oiM#+Cs3JM}|UwrRrz#wiH8j(a>~ioN6pw
zYaaKWng!fR2ZXv&Gl72~VjlY8`G`LN-rmvAYT(-5r+UkpYX!oj?=SLYpDW9u!o*>i
z!p$6xL6taa#_72i6|>aWmS@v{C5O%rcWUo12>iG^O#`H}FX941(l}lMUV#QVfw0XG
zy+&Fp;~S?GVAJ~@tfq_{=!|y>cTGWq%s?UbWyz=AeoQpL`yHi6_AxNAd|dX^F?m`V
zf~fz}JBe6WY&Y<Y@um_aJ*CguVgkD!gR`aZ%I6ZnQ=~%k?0K$3hK~$VJO#*OseQbf
z;lZXP!ckij`TS!{VV;;+bqyUAP>y|mJjV=!b0!FQ#>Px#VeFR}!z3`lZRfVh)ZX%J
zV1&2KIRhc}9hKs&^dCi-^c|m|j;^iWv~)<54$WVh5PGRu_1&|eWXR&~7jHW{8dUe^
zU!!{eg(CX~R3i?d$WI5!`zLw>h{+e*JN-)<FuDdQe%_bVjI-bV43_A`Q*S=4%3tGy
z(5nd_HZ{4R>Tr*kHGPFI{dElg|F;1A=y7+RCgl?vFzpJ%o<(#hJ4x6d$*L^~giI}7
z9PtR^o$Z&hUAgN@;$@tyUr>P+ww)U?nIb8?rCkhVROHVn3E2&*uutisH#N)!C?NGp
zGNsIIH`LXJB`{zsxp)49P(^k|;{=m|_VAxwUn1Q*->lK2H+^jmcOptBovLG>c8ZOX
z-T}B!QZf_)y)ihRvdPnH#k6Osp*R6)R@m^oqNU2v0X<8RK}i1?D~1>PnZnmRhZPoU
z8`coSpXIY0t3E{@YaQwQJ}~#oU4aaWrc*;fob&#GKDgc;gVXW&I4i-w%lKnyL<m={
z5pe%$?kD%J*Xu_PqQrwcxo6e0U8xBjUvn{TrOo9Z@kmu&X*J9-zue6(4UgEg@mJy0
zsFZF%T6eJ<5r_TxOJnIz*B9}&&IeSa4f>pCNM_2DpYm0_W>7~wNu~EtAoZa51J5O|
z@~Cg_=QQA7f$EK$?UWI5G-&~A1wbH1yi!{u=oBgaWGir)lTY=M4AmOck}+LS>b9ed
z=J#0cnTd_-ZayeszJsftzhycpe)CG+2t#7$!SIL5W5j_<W39SsV-Ix$1%5NJ0ecXv
zcS!jh6cT(Km?#*45o=&ta<yxez_@K0v^&2Ie}gW9FN+tlE^$NBUjhU-p_S}LEH*a$
z^Enmu(r0XU|91KKV8ngC>7hOy=?$m|SLj%d9nb^89S4cPu4J+9Y|2u<e$dR#Na!Hs
zWgcGTS548{FTv<R4q)R@?GO!+C1mp9($iWwD(PsPv;Ap(Ydlw7f`3T&PbF7q5xcZQ
zw*mRq>%IBb&#mr9!%rfgW>7<>Xwb+fb*e}<;Ufj;W1KC%Iq*}`!{}RFg0;2xo{J3P
zkNNW}^#&<`H)~WK!?x6p*vSan*X|y<)=8Vto*&|L9L5eP(TzTlY^i9@sE6ng%DYPQ
zxogg6ocSrX#^gAaUu}Cav{I0sDZaNa>laUU04&~OGn?M(@!iKq4{W<_7ev5EO>4E3
zzOmqiwPH6+uz0+6J1r*w?_~<qT;hZHM61Sy$VX6Yad4u6VX97J2E|%m!e?2~L5^&7
z6C3p@w8!@aeFv#Zab6^sAyPa4+5(%C706@JXwxHG&my^Pr4CnJPT93YoA2N8EU)h?
zLm2rXYk4jH-6MYwK5fIq2SLt_aN(JUY&Bme6tebCMwkdI7WZDKq+5fz?4^QNQW3i2
zgDmOEcLu}3`G~}H!V>U~gLTIrB)PPt{k|;o_L_E=6pD)hU6oh2v*TpS@(2!nh%RZY
zg!`HUe!r*}#fCTijwh^a0!F_P3e9~fm>_=psR*7wL#}}*9|Dt;6@(e*;2XgZ0pcb%
zS;$m5yQ-z*b+oSLLq;md+T1N@fiO+ZS7UW3fgMFniAGDm;Kbzil~dL1`BB9ddwvS1
zl&yP>`*Ey!Yi5ndS!n6*5q!pKK7D9*)x+*vNJ$C@gaNwjm7&ICMY&}BW{Bmq^I^&w
z8KKEo0+a8<YTW6**^kYD&}22PQMk8}SLWX&pvsV{BQ15hr7(A|DVy)y^Ul(BK6t4G
z<OUU&od8oULur-7pt!TIax89&nwt!zY4;M;)~yd98)UBih(_gyw8nJ@xw3-q=Gc58
z7@i+R)Ro>Ob>jIj)vWv{*Go{0GICPyqw7^B%a0dc+BwfYKB4iQR}OmC$OoaY5rVLO
zzL#ySd&y;MtFry{u!8oG)SI8#@tb~&pcHDR$S&(bFhgjti;tfT{`?H0be!Zs2WF94
zCLbNcJw=V;zkJYcET7tg&u|mR;w!R`_P#ro^U{HjoIJJNeRm!yH5Ul;Fp%EKh+UO!
zp`KLLAVRgDP!-Y2pPM^;rogG3_G0az2;t=5${`lPduQvFk63@>Ec%vjA;lo-|B^XJ
zQ*7=}KXd^lP#PI0yl`R>0{6Lr?cysQ0t*1t=#N*5)!U8UxidmW@ehVr^g{C@L7Pt=
zZ{V`~v2%s??Vn}Q!}8+V_b>?^XTc(e<|e;w-3=4h7;Hcg;thq(VQe%;{)QEg<HR4<
zT*PI-x5}K$`xsH|_P@`gVAG&Q?IbtNapQ2U=@+j0NoKH=6tn3(*XMIzaO1m^NR+#3
zd_|yG+!5}*`CARih#m5#e^L-;&4UUo*8FYPn~GS(sr#=S$)>9Kv#jHA6d9RY%4qOk
zkLT5<Npi51py5xa9dp882BLOC_V_*u_!a-4x#Ssth<Wd2zYjZF`8rjpiA1#DP6U9j
zGk5ZKWfN*#U7s9`tjB}J^}#JGP?eul*Fet1L>5^3=*rg=4IZr+u_?KeH`9(wWCSVm
z2F78z*R*gd#zm>W(Fy(vURKbVaoVnBPP-r$|HNOs8t_Pw=JO{G;aIADnX5^gd3-9D
zW|J=qscL4Ud7Q^2jN`Z_toiq|mK%Wsy??4z(%33PCp(|Wl}5Zd6@+NnWh{I91c?Z#
zS9twq>(B74=73H?_fI1g?DhaN?$9imw}>BS=(Tb>hA^1JbGRpz9>{*y>?cPXKUjo1
zKGU)B%dcM96syZC{c{-^<L#`Q^d_D_`4N!<O8X=m3~z~>veZv9gpuRVQYZ*~|N74^
zX-H*JCL$srkrJYHd%JCT{cZ>u=6-E!m%kVt8k_eJ6vEkg_y=A9tPhJ2xRH`xYtvLL
zWX!q+r|5}p&{j~u`kbYp7oNmXZPDnq0DQ#T%i6bt*UbJEh{uET4%=2kESou~z|a}Z
zX}DZ&A(yO*Xo1)}?fag-R)F--JY%j8FV2eteXR(4fuLZ@EpgqJk3r$%ie=a9K70u3
zQrTMh{%FbYI>a>^-iY!ye$GuaKfd7J3Wi5s?Drm5nN953d|vwVqjTH$Es|*t*Lokk
z3v<H51s^q7?t&nKj5RbZ7M+OOm;ptMFl%oQ<GhUJb5^gDbU*HA+(!|`lW9)@XP4r1
z7(cVzbCwV5^X{nG*imV!gEzdjI<eNr^nCkf+Jqu0sO^|n#6K5_eHq!k3-}f=;wRq4
zAMz+^1m<g=8}V(4+PzWr_EQDUsL%Fmn<0%Z&YFW7E|fQszH9<lDT-tR`8q~O)p)Uu
zr~Xyl@JPhjIkO+kz`mV%Kdx!OfqZMlvOA<l{x&@ts|1D0%MXTCFy%tuKI~`Eu(bzf
zuAMxS_z6R%u-@(;V@LB{U)%MIc&*Wy_kHI>Y8oe29`m22XHtrb!ZX!FwV?K)O^arZ
zzO!j|^yb&Q!rPY5l<KZQ0&#KAT0RwP^4YE$3U7%O<D^szTl|Fi4*VNbWvd(kll?$)
zv|<)O(oH#1YtrX-k<g7&WnX;ZnB|#3rA^Sq*uD|G7LIkC5bFdvPVTw)%Q2y*rRZis
z#Y4+@uN>MB&F|o+%Y5Nya1+=moETl#X&n%7oy=&t+8DNTOL0?pn&plYzci&QIIjoM
zM|jxruwBs~Q@v#vgVeLeh>|==g+zzNGe;~QC%yZynkgpnRYt(3yPIz#1u_-Viqvx@
zF^N&5hlY0deHP<Q66Oxj7q|5ZTixWboLXI8-<8zQIP&QpXGOH7q(8@n+DqR;l7ozh
zwX!lZ56!zkG1dnvIO_u2jMAPY4YQ((8s))SZdY)`g${ZmFGlC2u<6&UDSnC?d9nx|
zN6E=-ClUon4opOWU=HB`zDqJ+&1UvmW22;i>vdj^6C6wC{<l_G6fa_D<j2MXv#gAh
z#4)yZw^Ja}@yH_FS(gZ`u24G@krbkWxqj*hcBAp`YH766K@-?-8N;el%(yY2yKPW%
zjYY$FNqD;_iJbgEx=RmD|0@GSW)#`++4=WgRL^~(rv62DA$YqtIU$+72Cj!jK5z!4
z!`jPf&@wJB-0#rERm#H)w=3^LZY6!^;IG4u2rMxX0PnAAT}TZEyXKMAU#(9aaLa#%
ztJu9e<tkEWFoxC`lg6U(AupCIMs$t1tX`T?Mr*8svkq4ZJF3Fk`wcmoLs$8Wg@uLt
z=HGyaaidLN`9GeRhkX}7vr|g2ao2ghNXJm4Amm2V#x5C9AJwW+1dUN`s%gLQ7U#xr
z?dOdU*fWm(2RcA#gI$a@Ma+?HN>kPKT&PcJ{6{0@x%X<f&)QcV*nqylhp_Y;=0;{+
zUJ4Dq%75P9mNds_hY}0wg@2mxdQ?1EG(1tMh_SY?D9^~?0dAKg_t;UPCv<lqV$NG3
z>{|*|(OfENJ3(}{6JtGFq3jje**4e904y2zxGwVOfwRwl2X%RQDk%B1T(2^`{zVis
zkC>MfThE{BK2|;v$Fv&n8+Imtvb^6lQPN1}-G%v)uLrCMb|o|NYdCR}l;Lt+G2bxQ
zKdmhL=cDRrhM-9S^cz0T5dqh!uqeXzT~r#x-jiaAV+S|cN2=;SdHFUFCk2Mw?FNE_
z{`6`DE>^!gxt_^j6bvh7)DnvvO?B$>vgQktnO3Anb5KIg{u$(w5)NZc6KU;pgH9OU
z4t60+6KoHv7{9ic;v%WWuOa-99R=1h@JqXJ@X6+ce9YY}O>5e4<uXdru;L{s2U?4O
z`G;Wiip%z=Kj}_u|FnmMGKqi(&6KT*QHloZTeCq&FazGL+`1eZY!kLH-aWQ)ArZyl
z<j~6t^yUNGrC-O2-`Dh({h>$pI$r#ZYcfP@_#bDG1oKR0ap&fqMFyvhR-Z~L8KFf#
zO|9Nr8n3lf9hz_H9SlPl!iuF7La;q-_4z{wZj2#_q)<SuVd^tX>fzf(I<6<T5wxf(
zQ9~8q5YNHDtPd6i0CMzq!?p7tN|uW7p9bw>T5}dAZL1p=#b1q#ydBMP95nhT&*r%D
z@P|%}LJiEpo`WTo1nDaz?Uut_+dHe%fB-(bANzwDTP;%58|J%zU4&z-2Z~N|vL}9{
zO;T~;n_($&8Dq3x?kZG>ZFX3Qg(G<TosCp)A_H3w_p7argR49al!V~|(%Ge4(PA#b
z1~BG8O2DVKhdwP`<5k$Fh<QYAWn}JI?X5KFos(ObAJ&3-o9X|qB*}q@=9-q=SVR&1
z;r6$2%ZiG18N*L1SjaH`RmJPp2@A$(lrTy^;u``Gr{I&X$iw$OicdU>j|&9(np9Q8
zqiF0qDz~A^O8635WBFmeMzT?9j-W|O5l7ETK#2U}qxmnUWJdh@o^llt2Qdr_UunGa
zgUu3ss;CEs<;c;qQ1cqV2mT0#?5S=q7Ko9ugTMX8!s57f3kl!qwWz91)I&KzyjN8c
znUOkX<efV;Ch$pB-DZaCwwJq+>KEy?Z&UZ)yo;y})2n4b#<#>wfp)1qFgK(5#hsP&
z>A<@Lj-MJ+(>WyY-%SSGAHBMwQ@?tPMt|2g`N&?9xwpryC;6QZlDCjg!3;iHk$m;(
zgbcjf+F8hZ*WAzs@vH09MHQtSrk_A&BlbC3%->7iopB*CqHPLaDJi{OxIzh$Ua_!X
z69F3ztlWb!E5$UHnLHc)ray-WudD-GTHb0S7fN$bWNe&xBi89rwm3ES+4SjN?MzKf
zm!+r$__k{Fr$5h&hphdOesnMRdIFnoLGu3E3+tkDa|5JDV9cN5y_#vjyXfUk-nH~w
z(cEoKcBy@&N})KksUhCewnA7c3~LrXx{LfQZ6Q84C#})DAiYXV>2#p+Zr0EBIJj^4
z+~5^IF8skFgS7KL++mlD;D2pq+2IOWcIPW6CQwrf8F9ONmG@}4z71nW`fpFs3FD9V
z6HGLW;0oaZ%CD1_eJ`Z1!2U;m`|mTKHZ6MZ8?d7~mtO^1W0H)7nDZ7b{9YKis6B6%
zhD^!6OFq80E#r3Q%YJCfEr>->QoMK>bsVCtvC=HOo^IiUg_FxrxZ3~INy4<jmG`Hy
zg-~!14x<#KcKcbg+5V@C`+q;L`dkGZM};H=+PzS<L%CcS1PuDQ)t=n2*`Y$ld&1U2
zQ;OM%fMUdxgj&PLpzy?y?d#w}L+wxDg?XKb)#*-NM7`Epo3X8v)6-gajICAe>-r+3
zQsaVY3lA$gw)lSA&#CzVdCoY~7*+<Ox7%1~Wz*v{n^Yt3mp3H$4I7V@=kcxVi=x!!
zNa{dWRb`!INK5^u*L@_;WJ~y3U$u(@ty=69m%`ZueiOVFPE8uzelyJZY;mD)UC;Pa
z+3Es6aC2+fH5qcX`EaG;ywW<)n=xUwwKf=I`x$qo_?toEgVg9H6-=O#aB%DG0TZW0
zCD+N@95%W|!EbX^uM42LEr3I@Xs)|9k}K#09$rYxoG#sE2B;vhHFpwBVQTGkOh^oc
zG0XqD3BXi8F{x|lEgtv_K90Kvp(M3(8)&^v+_Gi?k%Gnjg(J9tx{ZO2d*K~ilJnA1
zK#)pnrH4Z;o`#wKUZ!As?6N*f?(QF@W%Z>fRD`Wj0MNrhV`P`rQ7*osNy{gJ1rsYy
zva^AcJW_f>#qQm#<#Qo5^C39btc6KlC+A+f$kZ#{@W+E!NOgyAO?U=i;@c%k@*LVG
zP9&fx4ykUleyD8a*X19Srh|P6TLbGNYB$fTsAV^JHa2eC{fK=$;0a)NlFC*CEM#@8
zx~DO$(SG)RWM2iFfdZ^->j56t9gBzOJ%`HI-~I53H-@d5pt2%>A?6Y8oK;_LTU=OJ
zL56CtFU!nU)Cc}BO0!BzUHw!UXI&PTe<(^ElM~jV-3rvJ1v1!<*z-*OGRteq#}CX|
zF$6d1hv<~8Cu{A{DjYlv3uO<B$WcshqMZLWU)H)PRxdV-^cy&$LGsze`FW8KNj|Zy
zFlE97w$<Z5AqlS1uy|8_c-_vsV<Y8d$AV)KI?LkMbG|o`%+|*+=4B!?|2GD~sOxR#
z&+$UhJoY&^DfsQqSk<oMsta9qwTdiDABksm%TPSYqx+;4Q~`bOX}s=Z^2j>r$(YcF
z+t~fJ3>d7dRhgO^9ntgPN-<O81(QW)HjAd&RW@IDJfd~<V!l%QAg*C1wzzS{j5NdQ
z9C*xW1T`D3;j{J3-x+{5$}Zk;I;;Gq2fo>sgTD#Acwm9EDwNO|jYoK~*iOFHk785m
ztQU|c7%9i$Qr&Ky-c=dACv<LMsf+oBZ)gCctlgvW77{PCX_R>c>$<p#+?sfl^-KEv
z+!bhFRPZ-^@-$!4120J_9E}Nads~|n(y;+u1MhWJNJA~V6rU*4)YN$F)s?G+5;7_T
zo-RxM-1G|_0T23j+oAqKSbRfdA3vit%7FU8LI!+mK{Pc(K9Nu7`n*W!j74H=_-&E?
zqM1~|`l+8j#jj33zOGFapOX10oSYo;%+L@AGjOHl#@J3h{NSgUun^janz8-ZxOdj}
zIr_&8?Px(>Ai=dsx84<vrB3RyTYMP)uzge$gkIe?qTZJLo_y5Vyol#O9m~K3D2i(K
z#;YrrnfFVd>$QBme4`%-$-+EH>jzp^2p1ODoElv@<}x>1{>$0k{w-DHFJ}9}i1b**
z#HcU{SV~rc**Q|J;z?6fcH7(Ae80okf0vZ|#HW~kt1FD32Z8RU)sLg~KV{boPkGcV
zd$3Hss{Z4DJ9_dg%<vwp;@zy8j%T7jjM7D0HGP=Cee?M1J&NYi$Gx>C)ubVjCK71f
z+%IfTs%QoE_Kli(L@C7Puj$<=2KZns{BFME56uibDLYsxt62}-iYK)4%YRzcndu+L
zS(rQ(m$FfwTNjDPm+(r}i3%%NB^fuwu4qwh^^{3XYB#>uXJvsZ@H5#4{a_dP>aN{X
zY*lyZ+dY%KH>4PY8m=M`l)sJ8bdv!A5d-hn?vMTG?N|dw=D7TOE+0gzZCEYefPnv6
zrOO!TC%+V*U9DtQ&^!3IrP!PRz`t+cU;%${7{q&R1PkXIWh_0h=3ZMR^D&6Zj<&EG
zYRWN0B-Li~;~!Ul4;0NQmIyaJOF8tuATDnZbZP2`uy;T>mDRCh=9rk#JDFmURi*%w
zLGbJAt~L^!0OoFGl|isyeNarq3~uy5Nx3RCAFfXYF;#Ag6ui9{a@9}TZ_JfLbA2Tq
z84k$#ulb#BZKp9M!Si+HAjLB2-{qgHR=)@=N3Ub5sR~ev&Hk=MOfT5Tk)My5t~G$C
zgmbL(e*ZM+bvf}t6nQC4@h7p}sAGB1;7D&f$(YsNAXDcG?pA@nLYM^E?BK?N<6;fl
znK{wINncq5xFJ1nLev)68s{z>B+KyOw>GnnjYr`|c9?Z5JhSm;E<sqkJ6ii4@s56?
z_UcNS9{0~B8O+PX7k+@=Rn-=>dY$ExI6z`8jrjL(&BatYTP?gmL8q>4;L$WJwwJr+
zh%NZM!q+wkWc^|_-Xwb$$_9S@TeY6h&n7vawYR!eEU~cqD=kkqiNyvx#OvH}Bep_-
z$Yw~ZXyk6=v3IARuk+LMQ}ZucHeU`hW^)(q_ct95GCeqKCgz?WMP(e=M|}wkX=JYQ
zK<e^COv^&<GuhUs23_Z_(pmE^=^u~Ya}GgUk3aVSl&oRoJxZDE9^K-z!(h!KguG5x
zbpK>jyQuPKXJ=@)8Qpv8tS!|lAi{_yX#aL#V_>yo6uRu9LfQw$P<v}WY|e&rnZpD+
zHz@@hT44g+;9&UzYA1)}>bVDQ-E8Rb;{3>IHFrw%+iBhgV1267>{NyY+@I7WaG?hS
zLM1Gea2w+)p&@M73#@Id6E#IYT`Zb*sSy1>!WysS1UmSNK4{aO+`b064MM>>xNAWm
z74<l=fRHQo8?bbm__aJ99>>18vA0DxO!Ywkl{rQm9-f+G*c>zai`^`oN_5>h&*QWw
z^|UBU4~8hyjJvUG9Yd)me><&vSZm%=hjd4$E9#=VYny=@#OL~0KfBLiui4S#Z}rk9
z{Pa=N*L|>{)B>EAqdXP1<Ppf{U#IoMo;>Y$<D3tly}mOl9ZIkD%X^)Fe)r3-o0d}7
zeUeX(w3E28?{(9!B<1olc?^4Wzh1;q;Oq(qPd+eqm2$#O_HiT#<ala<JYo6oUdvBw
z*xX;6ji0_F9nU_ALCQm_eeuHHwhpn|rEwI0i%i2)>4A&|ViclmVrP$%Bn6u#A-@t)
zTOS&J#3}6F{GcCPB#OBTpMN};z2ux$>IDliX_=>lTK>@0^q4o3%qih2ff*$rL8$w8
z#vc`~p-labI;}T_?J!;W4bxEA<<aNABW=A|K=S)RYLmFaY!xxeB6Rf-1z_+yzm*vd
zNmqk{Qtvhi76Af0^>~&8kW!l^ZN1Qft||3j#UHX=Pa{5m##+IoAe|O0icsq<hJ(4+
zU#XA|3WEaZxn6aDL}8&TEz;f;;^RtY69{S`ws)`i;Ioeh7Tvzqu<fZd>3GQ2+t-At
zxZTV}hHm3q&!6j^Z#`4N`V4t72*p=yBk*a^^R!uquTl^>&>*4Q60?FpGW9AWtNEKP
zvdhxvik%setslr=ptpi%1xQ>sUBTz_&ugz^duB#2ft2GUJ888E>XJ<`@}h_1^-ICY
zO8nO#86ec)TzvdbxxYd}^*zc!T3d2T|FvAEy(Vg-Pd214QXj=<(ov)1)}U_8yVafP
zHmO6{#|cqeYQXbdzZbe5k6=q#Q;s+)@NJN{zmkTH1*m~`OHmCoVh}(z*z9>-lCO!`
zjbf1YC+q(4(EO^nq0hmaU}jzk%pWa+@)PAaR}FxBAy@sZsEZPnP2%K@d$l0cu(~s6
z?rhws_2zXw%x+IA<dbr&YY3P{9(o?cuP%&On4zwN!NFDmGmH4tbDFfLwBA?1lB8jT
zQ2lGgv*LLClwAhjC2+JPMs%y0VGOnuDz`}84~PpQ-0^w?2d5ZMkQPbHa?anx?~lH&
zONH2exCXf)yv6^4nN=yubCTf()=!cng7L%&v(3APB+_4lWHwci1-p>@GphZ}7$v3c
zxnxuldhay_cz~N_$N!dhcra$1fix-BqtFjzd0CP$LsCAqpeTO^=#$ebjKw^6VVnUW
zSLKEthJi~BD#s!)mOe~^S>V^^DpaOH2TZ&-2V&nhu*UrPsv<ti4hJhH=>7fV9E8Z)
zPn>KDu?h;S>3GoCQ;3$iQJas`vX^h5x9p6bTIj873Cx0inc?2t&+M<>Oj@eW{C@!_
z2iW)tEVN|UEig1-fC(zSki7+)tBmR6Lg4CstwqRWZOsGvZR)z{9^L~?U?DFW4v?@K
zFhIN`eH$=X`6fA5f3hJ8SJP5I3!bZShY;JOJB3h3lhAYNjV3xkaRw7u=rSv3utwB?
z!N9HTW6|oS;Bu9k`isE9`b^g<q?mO}3E1%gHV>G<!my9>2S8XmHdm>sLCdUP7}|wE
z*7RbS&NG39SIvU)ZC)2PSE+}Bm09oOw`@usOy8Nn!jxI<Fy0-ot_pMXQiGLQ;|`f)
zDQwJw>^T!ym@=ynDrRlP<tkX2^_i9WgCi?552oWxVBs$s3fzcaDn;sz_IU6n+kMDx
zbFV4y2Q08~vSC%XiL1N;dHRRE<uifhNoM8APR+}c{tHf)V9S$!lsBMoKkl49IGHuh
zuEORXv%19|%KcV4DSpe7-&c8pF@fc2(J)VT;{es$hX2A%!Tt=~m6Okc7Fft+ty8+D
z^ezwRuHuQjJSMO_R<rW*0N+|a$jg&s7S4*?FM<|Wh}p2aAP>fv!1BCk2<7ME<G3rm
zQ^o~YX+V!z`{DXq#Lgo0EVG~-ofkchyPxhe|H&FRB^8sb{rOP69l!*Z4~vFyWVPe&
z)2#YM2#F9f8*Ylib(RS%KV%l%o4EhFD%_pr?+00FK#5sZ?U3P_2`pb04dG-*|E-u@
z-SUIK$?$#qlTe+>s>+1ps)$vvLX}zhoA9`D*{F<cKV-m=WswcL`!j(>q|9pDhsTxk
zMrBm{o8yV|4l!#A6IJUwTmS$B#Ysd#R9K<QtZXRxK7KqVSAK3({=(&w47Ox#u6Uz}
zRj|TdG=x#KZzLrx#N;aD2mb_C1~ggvY{>Jn142y}Fo6}Q%<6CL@LW8u{F7NfWFU|Q
z#w;-o9k=LUf3UCp*%G18WJQfI^;bMDJzKCt`o#@+TwU+a(#~z4!Cd;vimY6z`CI#g
zWcBYaf0MooJ<enT%U_$7-(PmH_+7grIljMgy_Jf6cwG6jwDUgPrLWA{aE|f@YRgl4
zCc-6smwU<^t6=$V`(=!z8^G71X)~pY%@|xw@n@gIIM_?M8_C*Nq0NA`PU*WS*kHCq
z=zlWo>ThptK!O-wg%Pj(+2`;X^o1bxWNikT|3=iIpIaFR{@X%(kGJcD$M`BNuDmbp
z{Gtl}LXaR?n{~}!W#3OGu!50Uc{ctweuPZ!^~iZp+D__GU`;`}c&$d(Ee74Rs=%h7
z#q6VU0+Lxa{x(&1R^h}e&ob)}+GUXyvaZiHHh+ipJ1CC{tWaf^RmE@?7FWE?@?f8#
zUKUv<YlFG@$F0c9+s_CH%EnvB56h1xs+fkH2c`W5PM^QEdGluY4?KsCSyqMgimgmw
zg)FlQASX%{(=p<e%LlvhV4-|&B^+7S>8+y8)XyjrSfR?SZoA-ii_csMWL2U3I#f2C
zW)p@g+7102zywyX$uQGUz_P7GkFP?_gMJ%C%-Uz0-rlHV6|8W{D%KSm99B4N$ij_R
zE(#2btj!LxX<-f%STU1X&bni~-&}1*j#<vxuxh+N9cAXT%yPSWL9P>5w*;F9VPclc
zg7PN0=x`qsSm9K&GDT<K*MG3<Clk$a;3_o~bBb9Dq2EGGV1;7xqG4W!JA)fy%#{;a
zx$e#HW&$f*nI$F&n747oz8G_5Pu3im=C=v4xsVC0Fl83pCtg)-jxkquWbK2S1Glp!
z!cb*a*L`h}TPeqHjxkr(WbK2@Zf``HzzS7nwLx#u9Up71tjO97t(sP4vdze(mQ-WS
zm6@z621`6xZmhX7lEt`+6Pts_Rh6q@lEr3uaZ{hbidW+yh{Yjm0~?UInMF>=$%DRv
zrIE#|2k|7}cVOr%f5B47n#RiLaYfek=(^o!uq3jkGp^#S@^wA(e9&*O1hQ^n6T*12
zH<0TLzJrxIg>e;+F)Q|9u>w|H+J=~e#R^#QY5QUfRxTTYI4x)Giz!&FFdDyPZH^&W
z`&gkNj>}n9F#~He<BE|L09aLwD^_#}04!E$h<nS830RD)__sMR0E-o{5@Bk%A#|`<
z0gIKhf&gm{^EoSL1ppQ+V6mb@5MZ$a79%SNuozbfWedXsixsdE%yPp4i*d!s3Ir_1
zRpQy45Wr%E(L}U;frG^gqX}tlg;LL8vBGGglC?Qdur{zlL!yFJQ57Iqtl*x&=2$58
z1{N!fCbTUK3M^K@Vq^sY7UL@6ZB8IyF|L?x2mmZrz+z@!&cX+a6|k5k*_X4h!D0n0
zW)fLdzJkRHSj=RzE@xqa#R^!=oQn>4V6j32Gr)3v1B-FR%%$jn1s2<Z#mueffCCmQ
zG%#~5I$(gsxMJo`7CKn0(7+6$=zt6sD>N{(Cd(UGj4Ng~w$KY$tbhgD{{k3)nl3t9
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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

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
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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
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

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
zcmV-K3A^@ENk&FI2><|BMM6+kP&gnk2><|)IRKpjDj)%t06vjOpG&8vDJ&y(=<u)-
z31e>EU?}MLhxR;CT_MnZdVkjXzwt}yZ{{n`$I?gq&rlEYT}m6yAG&^#-GB8CF+ldK
zG{}x}xmO(WUJSK$QJX+I;_EBRw0vT3wXT;(aw{NQ0AYZR2ql|$I_@`imfDot3IQ4R
zpKE20fAkrni6V$Ck<6j`HtSX<36T^e==))H3&x1`cQr~gD8(>L@yl#%wBGXz(z2IQ
z7{J$@b=P<;MLa;KM$o#X?Ud~VYCYdVT*;1t?eJ{LIo5{}uCAeAG(%U}UK($tq{J~D
z(Nzh6poWm~P6Xl-R@o>YEB_O3*}$hLw*IuS>3yIl0Y&Em3%t~O)xARDWU;#nhi2rQ
z)80?@z8;G6prvb}oT$lq!1K`{`(Kr0-z98|3?SLbCvgK;wb#1q-pnK0ub`SKp4M{M
zVhfYUmMRg4Wr0)_X4-z=RCuw8fG4GJqWOzrNx1}X9<TBwhhn_`Ii8QOC{{)8MW)1N
z+I|WlVbz)KyYVP<S328W>axKSDcOy6mE+J)QNE^Y#@c@112_Jz%!%s*NM!Al|Lv0C
zri!VR$^bR|vNLVmc*$>qXoOBnc3MhU*o?#g0RH&rPj>U%Xg`o$1&O3?UdXpY#Bn);
zZvE>=wricmBbx%PNX-?LlA|Ha4*_KV1{S)%d&e5cThEf^qsfq!(n#xeE`sVSte9l_
zhTmmn$&DHfsoyVFH!kLWyNQ)V*Uh{noSAg>%Mmx}nlP7Er)7fyiBC=PqaMpJtzkGM
zyyI?v*&(Kvh=OV<@rC{|x$HQ@3Ll`$+KjqE$f=iwolBo=e16lYIL`E3^#9M{)XYq%
zBMhTkQ;c9C)bVbyS_PA7=GOwk&@_dFFzK#2NjSmqnGyuHrQ)?YgkZs2^IsHeMg04d
zT;A_pS3)m8>k{sGykY{Gfn7_YX1Dm28V9sI&hrO$3BN-4TkX?n+O!Dtg?SBaO`M@d
zEb&67fZ&fBz0qQ0M9z$2CV_$Zp41OSX60orWOJZ-r{$+yYZKop1Sor9Uf=94_Yb=u
z)AfyIQZ!P`h|>VH6j4mD7k0pP0ypLxxG5PAtPr?+%VD-984f>a`lkyYUS+=xv6f*k
zISt3i%l*ZLy5WGQq#-(gAWUt!CGIuM7%@WBs-jW-mIZ#=Xyt_*Ze!WsT$6QQrydTr
z+wjLR@rm4@S@wH?Xk0FRgA%(AaTkJavj>V>e<aX#=t4NxF?rQJ(PTO!*%`Bim(P+B
zgJ@L>Xjan`OC})?mFzoJqn}6W-=$3VlxlY2(T)MsE@<H2#Y*x*oLS#MR_F%&4ljJR
zc3wy6c!XWSFk4voDuKxNnu6+Q`q_@0g`V6jI)=y6e{sBAWC~eQp`)Qy`sOY#asu&F
zm<h|)bGu3M&C)+thmc2`(HRrrFNc<F<-E&}Yb|;eq|aU1A0T?D+@uR3#<rVFbBu#=
zWW%EGw^-RPmKC^u{n{KZCrleN_Qh&{2pg-cM<0E|<itBK+V-gDs?3K_mDt4}f$dc*
z`zNu%3b>aoJ)#HB|2IpAao)fwC7kESG#MG}^#1_3m3lHlhxZDz2WEBCJ0SJSnF-c8
zfJoI4WinQ5#z&a0=pcR`z?n2|7ieyz6lJsRTI_<w&Ne$>QjtJrS4|OuADDS=GG;ce
zw_vP!u2)y%_>?~zZ7;<!Xm87#T%C%Q22K36)k>crri>#}2XZuj84o1q7E~QEA31_W
z@3h=%4QCQh$po95DK1NZo%;0#V$-!6BoOuIGD3d3=T5hk2e^_<Eb~kl%E65KMZp~-
zZcWwePD2Iy7vp!#=E=Vf00F!X+E+1Xrsxb-+wuL|9&u32p=h!3F&zEV`APhg@JXsd
zr}IQqPh?8~1{kSTx!61H;yTzOI?WK|Sy;@6Caagf=;6<_M`$kRJ<3-d`t$S>_$nte
zWyWR7G+6k!imGEpA~?0l74k!mmlypbvg%a)hG&>-pI*1b>df)=S@LF3fBNY+&XyxK
zSICcub=ZE0tY6U=aFi=`)<jawK6}ZWx&AZo?!Ervh*nJ#{0OkSIH>l}S0uda9$x^p
zO-FBUYVe=~9)!rPCN>4EyNv$uAK$nIWA{wLmeVhnrV-s|OJ2oYef6V1RV~W7J5Y@p
zvzLRNCvbxc@u}TEY3FxyAvIuY$|BZ_2oLGL;#lxONa%u{FAg+;fF?S0*6oX{c#Tkg
zfBtG2+<F{Mco<iz9*9lE)DRhb#0q1s(_j?*Q$*J>x1r;9s2VgJRt%LFbZ(|SbNw1E
z0Tigf!aRr66+xr`5Pr#uII6sYiQDIrs55{;s<o;Iz{NoV#9*~&!~foF2_eUwNM3Z;
zZt}6HQd{*_uh#iTy{Z`)U_U7ytD8Tu;3PxSLyq9Y&Dor*?h&F^OX;`gH>IIGb4PC7
z(Cx1nGgtZt9m4uNh%x}yiJUAckI#`0C{=gTG5(*+cr21D8d#jGo4`<2X)j_s2ixLl
z!>A@QN^0(c<m9B)LZM~J%0;0Ail^8M{n96yfgoWRg4_HeLx^xYXFog4Cn>M{22zgn
zG_Vec;Ir{I3o6Kv0csZ237W_OXr_9kS|sh=AQ#q8AcfIjoSK>5$;iC7OXXWR#N$$}
zXfmxu!``+>i1#KQtUJDjxztm4Se>>W$|w78*8{Yt?^Y*+Rj(AiIW{v>uBh~If&EDD
zt|I2@5k4^d2p{=lJaLSCVKiiXnNY&f;h#r;KZ+XBGm(&WuL^g#8Lu67M3;g*m;*>q
z-~)1`#v}`4W0zKyFk3}r{)CXws=I<H<bub|uC@I>B;7PcGy|6?IO+W_)4#d})^x1d
z@ZoSYe%B3flF{J^?Jji(#t0nEF@pklpaDmR*-tO@lRyrSxm(@>hPkgraW3K*>&H^&
zh{UB;LW#0|FNhXo<<(}rXz&r(!}Fe=wa8ws#%-=GFfQ!-Rj_`{cegRlF)ck0u9e#u
z7WGMN8l}$v>uC0Y*g%pNNQ4Zgya1mv!v!*Am0?2x$}pZ%Mqd>c_ggY{1I(?CnVBH?
q2WlXAuo}-nHuRuBIZ2~}vdi#hrp>UKC(@A{P&A*f+vT;*Bme-TgP)K9

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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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">&laquo; 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 &raquo;</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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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"> &nbsp; &nbsp; Page 1 of 5 &nbsp; &nbsp; </span><a class="older-posts" href="/blog/page2/" aria-label="Goto Page with Older Posts">Older &raquo;</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"> &nbsp; &nbsp; Page 1 of 5 &nbsp; &nbsp; </span><a class="older-posts" href="/blog/page2/" aria-label="Goto Page with Older Posts">Older &raquo;</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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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">&laquo; Newer </a><span class="page-number"> &nbsp; &nbsp; Page 2 of 5 &nbsp; &nbsp; </span><a class="older-posts" href="/blog/page3/" aria-label="Goto Page with Older Posts">Older &raquo;</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">&laquo; Newer </a><span class="page-number"> &nbsp; &nbsp; Page 2 of 5 &nbsp; &nbsp; </span><a class="older-posts" href="/blog/page3/" aria-label="Goto Page with Older Posts">Older &raquo;</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&gtm.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&#58; Challenge Lab" on Qwiklabs. It includes&#58; 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&#58; Challenge Lab" on Qwiklabs. It includes&#58; 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&#58; 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">&laquo; Newer </a><span class="page-number"> &nbsp; &nbsp; Page 3 of 5 &nbsp; &nbsp; </span><a class="older-posts" href="/blog/page4/" aria-label="Goto Page with Older Posts">Older &raquo;</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">&laquo; Newer </a><span class="page-number"> &nbsp; &nbsp; Page 3 of 5 &nbsp; &nbsp; </span><a class="older-posts" href="/blog/page4/" aria-label="Goto Page with Older Posts">Older &raquo;</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&gtm.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">&laquo; Newer </a><span class="page-number"> &nbsp; &nbsp; Page 4 of 5 &nbsp; &nbsp; </span><a class="older-posts" href="/blog/page5/" aria-label="Goto Page with Older Posts">Older &raquo;</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">&laquo; Newer </a><span class="page-number"> &nbsp; &nbsp; Page 4 of 5 &nbsp; &nbsp; </span><a class="older-posts" href="/blog/page5/" aria-label="Goto Page with Older Posts">Older &raquo;</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&gtm.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">&laquo; Newer </a><span class="page-number"> &nbsp; &nbsp; Page 5 of 5 &nbsp; &nbsp; </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">&laquo; Newer </a><span class="page-number"> &nbsp; &nbsp; Page 5 of 5 &nbsp; &nbsp; </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&gtm.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> &gt; <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> &gt; <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&gtm.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&gtm.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&gtm.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&gtm.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> &gt; <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> &gt; <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 &lt;internal-IP-of-juice-shop&gt;
 </code></pre></div> </div> <p>(Remember to REPLACE <code class="language-plaintext highlighter-rouge">&lt;internal-IP-of-juice-shop&gt;</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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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> &amp; <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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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> &gt; <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> &gt; <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&gtm.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&gtm.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&gtm.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">&gt;</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://&lt;YOUR-PROJECT_ID&gt;-marking/task4-gvi.result
 </code></pre></div> </div> <p><strong>Replace</strong> <code class="language-plaintext highlighter-rouge">&lt;YOUR-PROJECT_ID&gt;</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&gtm.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> &gt; <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&gtm.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&gtm.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> &lt;filename&gt;.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&gtm.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 &amp; Admin</strong> &gt; <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> &gt; <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&gtm.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&gtm.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&gtm.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.&lt;YOUR_TABLE_NAME&gt;`</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">&lt;YOUR_DATASET_ID&gt;</code> and <code class="language-plaintext highlighter-rouge">&lt;NEW_TABLE_NAME&gt;</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">&lt;YOUR_DATASET_ID&gt;</code> and <code class="language-plaintext highlighter-rouge">&lt;NEW_TABLE_NAME&gt;</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&gtm.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 &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" 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 &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" 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> &amp; <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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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&gtm.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&gtm.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 &lt; 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 &gt;= 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 &gt;= 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">&laquo; 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 &gt;= 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 &gt;= 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">&laquo; 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 &raquo;</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&gtm.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 &amp; DevOps</li> <li>Websites &amp; App Dev</li> <li>Big Data</li> <li>Machine Learning</li> <li>Security, Backup &amp; 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">&times;</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 &gt;= 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 &gt;= 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&amp;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&amp;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&amp;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&amp;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&gtm.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&gtm.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 &#39;Challenge: GCP Architecture&#39; 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 &#39;Challenge: GCP Architecture&#39; 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 &#39;Challenge: GCP Architecture&#39; 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 &#39;Challenge: GCP Architecture&#39; 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 &#39;Challenge: GCP Architecture&#39; 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 &#39;Challenge: GCP Architecture&#39; 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 &#39;Challenge: GCP Architecture&#39; 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 &#39;Challenge: GCP Architecture&#39; 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 &#39;Challenge: GCP Architecture&#39; 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 &#39;Challenge: GCP Architecture&#39; 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 &#39;Challenge: GCP Architecture&#39; 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 &#39;Challenge: GCP Architecture&#39; 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 &#39;Challenge: GCP Architecture&#39; 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&gtm.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&gtm.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&gtm.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&gtm.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:\&gt;</span><code class="language-plaintext highlighter-rouge">diskpart</code></li> <li><span class="cli">DISKPART&gt;</span><code class="language-plaintext highlighter-rouge">list disk</code></li> <li><span class="cli">DISKPART&gt;</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&gt;</span><code class="language-plaintext highlighter-rouge">list partition</code></li> <li><span class="cli">DISKPART&gt;</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&gt;</span><code class="language-plaintext highlighter-rouge">assign letter=S</code></li> <li><span class="cli">DISKPART&gt;</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:\&gt;</span><code class="language-plaintext highlighter-rouge">S:</code></li> <li><span class="cli">S:\&gt;</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:\&gt;</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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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 &apos;gh repo clone&apos; Command</title>
+        <description>&lt;p&gt;Ever found yourself typing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh repo clone&lt;/code&gt; 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.&lt;/p&gt;
+
+&lt;h2 id=&quot;why-custom-completion-matters&quot;&gt;Why Custom Completion Matters&lt;/h2&gt;
+
+&lt;p&gt;While the standard &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh repo clone&lt;/code&gt; is incredibly useful, it lacks intelligent autocompletion. Here’s what you’re missing:&lt;/p&gt;
+
+&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;gh repo clone my&amp;lt;tab&amp;gt;
+my-awesome-project    my-docker-images     my-python-scripts
+&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
+
+&lt;p&gt;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.&lt;/p&gt;
+
+&lt;p&gt;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 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh repo clone&lt;/code&gt; command. The script enables:&lt;/p&gt;
+
+&lt;ul&gt;
+  &lt;li&gt;&lt;strong&gt;Smart Repository Suggestions&lt;/strong&gt;: Instantly see matching repositories as you type.&lt;/li&gt;
+  &lt;li&gt;&lt;strong&gt;Flag Completion&lt;/strong&gt;: Access additional &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; options for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh repo clone&lt;/code&gt; by pressing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tab&lt;/code&gt; twice after the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--&lt;/code&gt; flag.&lt;/li&gt;
+&lt;/ul&gt;
+
+&lt;p&gt;The completion script automatically populates suggestions, enabling faster interaction and execution with the GitHub CLI.&lt;/p&gt;
+
+&lt;h3 id=&quot;common-use-cases&quot;&gt;Common Use Cases&lt;/h3&gt;
+
+&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# Clone to a custom directory&lt;/span&gt;
+gh repo clone username/repo
+
+&lt;span class=&quot;c&quot;&gt;# Clone with a specific branch&lt;/span&gt;
+gh repo clone username/repo &lt;span class=&quot;nt&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--branch&lt;/span&gt; feature-branch
+
+&lt;span class=&quot;c&quot;&gt;# Clone with depth limit&lt;/span&gt;
+gh repo clone username/repo &lt;span class=&quot;nt&quot;&gt;--&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;--depth&lt;/span&gt; 1
+&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
+
+&lt;h2 id=&quot;quick-setup-guide&quot;&gt;Quick Setup Guide&lt;/h2&gt;
+
+&lt;ol&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;strong&gt;Install the completion script&lt;/strong&gt;:&lt;/p&gt;
+
+    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;curl &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; ~/.gh-repo-clone-completion.bash https://gist.github.com/chriskyfung/50039cb2a9b586047adc2726085c6280/raw/.bash_profile
+&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
+
+    &lt;p&gt;You can view the source code and contribute on &lt;a href=&quot;https://gist.github.com/chriskyfung/50039cb2a9b586047adc2726085c6280&quot;&gt;GitHub Gist&lt;/a&gt;.&lt;/p&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;strong&gt;Add to your shell&lt;/strong&gt;:&lt;/p&gt;
+
+    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;source ~/.gh-repo-clone-completion.bash&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bashrc  &lt;span class=&quot;c&quot;&gt;# for bash&lt;/span&gt;
+&lt;span class=&quot;c&quot;&gt;# OR&lt;/span&gt;
+&lt;span class=&quot;nb&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;source ~/.gh-repo-clone-completion.bash&apos;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc   &lt;span class=&quot;c&quot;&gt;# for zsh&lt;/span&gt;
+&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
+  &lt;/li&gt;
+  &lt;li&gt;
+    &lt;p&gt;&lt;strong&gt;Verify the Setup&lt;/strong&gt;:&lt;/p&gt;
+
+    &lt;p&gt;Type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh repo clone &amp;lt;tab&amp;gt;&lt;/code&gt; in your terminal. If set up correctly, you should see repository suggestions as you type.&lt;/p&gt;
+
+    &lt;p&gt;Type &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gh repo clone -- &amp;lt;tab&amp;gt;&lt;/code&gt; in your terminal. You should see additional &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;git clone&lt;/code&gt; flags by listing them after &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--&lt;/code&gt;.&lt;/p&gt;
+  &lt;/li&gt;
+&lt;/ol&gt;
+
+&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
+
+&lt;p&gt;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.&lt;/p&gt;
+
+&lt;p&gt;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!&lt;/p&gt;
+
+&lt;p&gt;Happy coding! 🚀&lt;/p&gt;
+</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>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
@@ -1092,7 +1180,7 @@ gcloud beta run deploy frontend-production-service &lt;span class=&quot;se&quot;
 
 &lt;h2 id=&quot;-demonstration-video&quot;&gt;&lt;i class=&quot;far fa-play-circle&quot;&gt;&lt;/i&gt; Demonstration Video&lt;/h2&gt;
 
-&lt;amp-youtube id=&quot;yt-4rqeFp87s6I&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; data-videoid=&quot;4rqeFp87s6I&quot; title=&quot;GSP344 Serverless Firebase Development: Challenge Lab | 🐱‍🏍 GCP learning tour&quot; data-vars-video-title=&quot;GSP344 Serverless Firebase Development: Challenge Lab | 🐱‍🏍 GCP learning tour&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=4rqeFp87s6I&quot; data-param-rel=&quot;0&quot;&gt;
+&lt;amp-youtube id=&quot;yt-4rqeFp87s6I&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; credentials=&quot;omit&quot; data-videoid=&quot;4rqeFp87s6I&quot; title=&quot;GSP344 Serverless Firebase Development: Challenge Lab | 🐱‍🏍 GCP learning tour&quot; data-vars-video-title=&quot;GSP344 Serverless Firebase Development: Challenge Lab | 🐱‍🏍 GCP learning tour&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=4rqeFp87s6I&quot; data-param-rel=&quot;0&quot;&gt;
   &lt;div fallback=&quot;&quot;&gt;
     &lt;p&gt;This browser does not support the YouTube video player. &lt;a href=&quot;https://www.youtube.com/watch?v=4rqeFp87s6I&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Watch on YouTube&lt;/a&gt;&lt;/p&gt;
   &lt;/div&gt;
@@ -1364,7 +1452,7 @@ gcloud beta run deploy frontend-production-service &lt;span class=&quot;se&quot;
 
 &lt;h2 id=&quot;-demonstration-video&quot;&gt;&lt;i class=&quot;far fa-play-circle&quot;&gt;&lt;/i&gt; Demonstration Video&lt;/h2&gt;
 
-&lt;amp-youtube id=&quot;yt-C49jYtIMAsg&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; data-videoid=&quot;C49jYtIMAsg&quot; title=&quot;GSP340 Build and Optimize Data Warehouses with BigQuery: Challenge Lab (UPDATED ON JUNE 2021)&quot; data-vars-video-title=&quot;GSP340 Build and Optimize Data Warehouses with BigQuery: Challenge Lab (UPDATED ON JUNE 2021)&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=C49jYtIMAsg&quot; data-param-rel=&quot;0&quot;&gt;
+&lt;amp-youtube id=&quot;yt-C49jYtIMAsg&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; credentials=&quot;omit&quot; data-videoid=&quot;C49jYtIMAsg&quot; title=&quot;GSP340 Build and Optimize Data Warehouses with BigQuery: Challenge Lab (UPDATED ON JUNE 2021)&quot; data-vars-video-title=&quot;GSP340 Build and Optimize Data Warehouses with BigQuery: Challenge Lab (UPDATED ON JUNE 2021)&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=C49jYtIMAsg&quot; data-param-rel=&quot;0&quot;&gt;
   &lt;div fallback=&quot;&quot;&gt;
     &lt;p&gt;This browser does not support the YouTube video player. &lt;a href=&quot;https://www.youtube.com/watch?v=C49jYtIMAsg&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Watch on YouTube&lt;/a&gt;&lt;/p&gt;
   &lt;/div&gt;
@@ -1673,7 +1761,7 @@ for &lt;/span&gt;node &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span c
 
 &lt;h2 id=&quot;-demonstration-video&quot;&gt;&lt;i class=&quot;far fa-play-circle&quot;&gt;&lt;/i&gt; Demonstration Video&lt;/h2&gt;
 
-&lt;amp-youtube id=&quot;yt-jeB-FIeGKkQ&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; data-videoid=&quot;jeB-FIeGKkQ&quot; title=&quot;GSP343 Optimize Costs for Google Kubernetes Engine: Challenge Lab | GCP learning tour&quot; data-vars-video-title=&quot;GSP343 Optimize Costs for Google Kubernetes Engine: Challenge Lab | GCP learning tour&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=jeB-FIeGKkQ&quot; data-param-rel=&quot;0&quot;&gt;
+&lt;amp-youtube id=&quot;yt-jeB-FIeGKkQ&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; credentials=&quot;omit&quot; data-videoid=&quot;jeB-FIeGKkQ&quot; title=&quot;GSP343 Optimize Costs for Google Kubernetes Engine: Challenge Lab | GCP learning tour&quot; data-vars-video-title=&quot;GSP343 Optimize Costs for Google Kubernetes Engine: Challenge Lab | GCP learning tour&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=jeB-FIeGKkQ&quot; data-param-rel=&quot;0&quot;&gt;
   &lt;div fallback=&quot;&quot;&gt;
     &lt;p&gt;This browser does not support the YouTube video player. &lt;a href=&quot;https://www.youtube.com/watch?v=jeB-FIeGKkQ&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Watch on YouTube&lt;/a&gt;&lt;/p&gt;
   &lt;/div&gt;
@@ -1906,7 +1994,7 @@ gcloud projects add-iam-policy-binding &lt;span class=&quot;nv&quot;&gt;$DEVSHEL
 
 &lt;h2 id=&quot;-demonstration-video&quot;&gt;&lt;i class=&quot;far fa-play-circle&quot;&gt;&lt;/i&gt; Demonstration Video&lt;/h2&gt;
 
-&lt;amp-youtube id=&quot;yt-HiFMZGDBzZo&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; data-videoid=&quot;HiFMZGDBzZo&quot; title=&quot;GSP342 Ensure Access &amp;amp; Identity in Google Cloud: Challenge Lab (With Audio Instruction 🔉)&quot; data-vars-video-title=&quot;GSP342 Ensure Access &amp;amp; Identity in Google Cloud: Challenge Lab (With Audio Instruction 🔉)&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=HiFMZGDBzZo&quot; data-param-rel=&quot;0&quot;&gt;
+&lt;amp-youtube id=&quot;yt-HiFMZGDBzZo&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; credentials=&quot;omit&quot; data-videoid=&quot;HiFMZGDBzZo&quot; title=&quot;GSP342 Ensure Access &amp;amp; Identity in Google Cloud: Challenge Lab (With Audio Instruction 🔉)&quot; data-vars-video-title=&quot;GSP342 Ensure Access &amp;amp; Identity in Google Cloud: Challenge Lab (With Audio Instruction 🔉)&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=HiFMZGDBzZo&quot; data-param-rel=&quot;0&quot;&gt;
   &lt;div fallback=&quot;&quot;&gt;
     &lt;p&gt;This browser does not support the YouTube video player. &lt;a href=&quot;https://www.youtube.com/watch?v=HiFMZGDBzZo&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Watch on YouTube&lt;/a&gt;&lt;/p&gt;
   &lt;/div&gt;
@@ -2363,7 +2451,7 @@ Run the following to apply the configuration file:&lt;/p&gt;
 
 &lt;h2 id=&quot;-demonstration-video&quot;&gt;&lt;i class=&quot;far fa-play-circle&quot;&gt;&lt;/i&gt; Demonstration Video&lt;/h2&gt;
 
-&lt;amp-youtube id=&quot;yt-bpeOjFZklpg&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; data-videoid=&quot;bpeOjFZklpg&quot; title=&quot;GSP335 Secure Workloads in Google Kubernetes Engine: Challenge Lab&quot; data-vars-video-title=&quot;GSP335 Secure Workloads in Google Kubernetes Engine: Challenge Lab&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=bpeOjFZklpg&quot; data-param-rel=&quot;0&quot;&gt;
+&lt;amp-youtube id=&quot;yt-bpeOjFZklpg&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; credentials=&quot;omit&quot; data-videoid=&quot;bpeOjFZklpg&quot; title=&quot;GSP335 Secure Workloads in Google Kubernetes Engine: Challenge Lab&quot; data-vars-video-title=&quot;GSP335 Secure Workloads in Google Kubernetes Engine: Challenge Lab&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=bpeOjFZklpg&quot; data-param-rel=&quot;0&quot;&gt;
   &lt;div fallback=&quot;&quot;&gt;
     &lt;p&gt;This browser does not support the YouTube video player. &lt;a href=&quot;https://www.youtube.com/watch?v=bpeOjFZklpg&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Watch on YouTube&lt;/a&gt;&lt;/p&gt;
   &lt;/div&gt;
@@ -2798,7 +2886,7 @@ git push origin master
 
 &lt;h2 id=&quot;-demonstration-video&quot;&gt;&lt;i class=&quot;far fa-play-circle&quot;&gt;&lt;/i&gt; Demonstration Video&lt;/h2&gt;
 
-&lt;amp-youtube id=&quot;yt-pSSA6vlRgtA&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; data-videoid=&quot;pSSA6vlRgtA&quot; title=&quot;GSP330 Implement DevOps in Google Cloud: Challenge Lab&quot; data-vars-video-title=&quot;GSP330 Implement DevOps in Google Cloud: Challenge Lab&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=pSSA6vlRgtA&quot; data-param-rel=&quot;0&quot;&gt;
+&lt;amp-youtube id=&quot;yt-pSSA6vlRgtA&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; credentials=&quot;omit&quot; data-videoid=&quot;pSSA6vlRgtA&quot; title=&quot;GSP330 Implement DevOps in Google Cloud: Challenge Lab&quot; data-vars-video-title=&quot;GSP330 Implement DevOps in Google Cloud: Challenge Lab&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=pSSA6vlRgtA&quot; data-param-rel=&quot;0&quot;&gt;
   &lt;div fallback=&quot;&quot;&gt;
     &lt;p&gt;This browser does not support the YouTube video player. &lt;a href=&quot;https://www.youtube.com/watch?v=pSSA6vlRgtA&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Watch on YouTube&lt;/a&gt;&lt;/p&gt;
   &lt;/div&gt;
@@ -3027,7 +3115,7 @@ python analyze-images.py &lt;span class=&quot;nv&quot;&gt;$PROJECT&lt;/span&gt;
 
 &lt;h2 id=&quot;-demonstration-video&quot;&gt;&lt;i class=&quot;far fa-play-circle&quot;&gt;&lt;/i&gt; Demonstration Video&lt;/h2&gt;
 
-&lt;amp-youtube id=&quot;yt-kEEqbeqR6og&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; data-videoid=&quot;kEEqbeqR6og&quot; title=&quot;GSP329 Integrate with Machine Learning APIs: Challenge Lab&quot; data-vars-video-title=&quot;GSP329 Integrate with Machine Learning APIs: Challenge Lab&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=kEEqbeqR6og&quot; data-param-rel=&quot;0&quot;&gt;
+&lt;amp-youtube id=&quot;yt-kEEqbeqR6og&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; credentials=&quot;omit&quot; data-videoid=&quot;kEEqbeqR6og&quot; title=&quot;GSP329 Integrate with Machine Learning APIs: Challenge Lab&quot; data-vars-video-title=&quot;GSP329 Integrate with Machine Learning APIs: Challenge Lab&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=kEEqbeqR6og&quot; data-param-rel=&quot;0&quot;&gt;
   &lt;div fallback=&quot;&quot;&gt;
     &lt;p&gt;This browser does not support the YouTube video player. &lt;a href=&quot;https://www.youtube.com/watch?v=kEEqbeqR6og&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Watch on YouTube&lt;/a&gt;&lt;/p&gt;
   &lt;/div&gt;
@@ -3089,313 +3177,6 @@ python analyze-images.py &lt;span class=&quot;nv&quot;&gt;$PROJECT&lt;/span&gt;
         <category>Cloud AI</category>
         
         
-        <category>Cloud</category>
-        
-      </item>
-    
-      <item>
-        <title>☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook</title>
-        <description>&lt;p&gt;In this article, we will go through the lab &lt;strong&gt;GSP324&lt;/strong&gt; &lt;em&gt;&lt;a href=&quot;https://www.qwiklabs.com/focuses/12011?parent=catalog&quot;&gt;Explore Machine Learning Models with Explainable AI: Challenge Lab&lt;/a&gt;&lt;/em&gt;, which is an &lt;a href=&quot;https://www.qwiklabs.com/quests/126&quot;&gt;advanced-level&lt;/a&gt; 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.&lt;/p&gt;
-
-&lt;p&gt;&lt;strong&gt;Topics tested&lt;/strong&gt;:&lt;/p&gt;
-
-&lt;ol&gt;
-  &lt;li&gt;Launching an AI Platform Notebook&lt;/li&gt;
-  &lt;li&gt;Downloading and exploring a sample dataset&lt;/li&gt;
-  &lt;li&gt;Building and training two different TensorFlow models&lt;/li&gt;
-  &lt;li&gt;Deploying models to the Cloud AI Platform&lt;/li&gt;
-  &lt;li&gt;Using the What-If Tool to compare the models&lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;h2 id=&quot;start-a-jupyterlab-notebook-instance&quot;&gt;Start a JupyterLab Notebook instance&lt;/h2&gt;
-
-&lt;ol&gt;
-  &lt;li&gt;In the Cloud Console, in the search bar, type in &lt;strong&gt;Notebook&lt;/strong&gt;.&lt;/li&gt;
-  &lt;li&gt;Select &lt;strong&gt;Notebook&lt;/strong&gt; for &lt;strong&gt;AI Platform&lt;/strong&gt;.&lt;/li&gt;
-  &lt;li&gt;On the Notebook instances page, click &lt;strong&gt;New Instance&lt;/strong&gt;.&lt;/li&gt;
-  &lt;li&gt;
-    &lt;p&gt;In the Customize instance menu, select the latest version of TensorFlow &lt;em&gt;without&lt;/em&gt; GPUs.&lt;/p&gt;
-
-    &lt;figure class=&quot;ml-li&quot;&gt;&lt;amp-img width=&quot;1138&quot; height=&quot;660&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task1-new-tensorflow-notebook-1.webp&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-     &lt;amp-img fallback=&quot;&quot; width=&quot;1138&quot; height=&quot;660&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task1-new-tensorflow-notebook-1.png&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-   &lt;/amp-img&gt;&lt;/figure&gt;
-  &lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;ol start=&quot;5&quot;&gt;
-  &lt;li&gt;
-    &lt;p&gt;In the &lt;strong&gt;New notebook instance&lt;/strong&gt; dialog, accept the default options and click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;
-
-    &lt;figure class=&quot;ml-li text-center&quot;&gt;&lt;amp-img width=&quot;559&quot; height=&quot;506&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task1-new-tensorflow-notebook-2.webp&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-     &lt;amp-img fallback=&quot;&quot; width=&quot;559&quot; height=&quot;506&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task1-new-tensorflow-notebook-2.png&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-   &lt;/amp-img&gt;&lt;/figure&gt;
-  &lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;ol start=&quot;6&quot;&gt;
-  &lt;li&gt;After a few minutes, the AI Platform console will display your instance name, followed by Open Jupyterlab.&lt;br /&gt;&lt;br /&gt;Click &lt;strong&gt;Open JupyterLab&lt;/strong&gt;. Your notebook is now set up.&lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;h2 id=&quot;download-the-challenge-notebook&quot;&gt;Download the Challenge Notebook&lt;/h2&gt;
-
-&lt;ol&gt;
-  &lt;li&gt;
-    &lt;p&gt;In your notebook, click the &lt;strong&gt;terminal&lt;/strong&gt;.&lt;/p&gt;
-
-    &lt;figure class=&quot;ml-li&quot;&gt;&lt;amp-img width=&quot;985&quot; height=&quot;668&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task2-import-dataset-to-jupyter-notebook-1.webp&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-     &lt;amp-img fallback=&quot;&quot; width=&quot;985&quot; height=&quot;668&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task2-import-dataset-to-jupyter-notebook-1.png&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-   &lt;/amp-img&gt;&lt;/figure&gt;
-  &lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;ol start=&quot;2&quot;&gt;
-  &lt;li&gt;
-    &lt;p&gt;Clone the repo:&lt;/p&gt;
-
-    &lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;git clone https://github.com/GoogleCloudPlatform/training-data-analyst
-&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
-  &lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;ol start=&quot;3&quot;&gt;
-  &lt;li&gt;Go to the enclosing folder: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;training-data-analyst/quests/dei&lt;/code&gt;&lt;/li&gt;
-  &lt;li&gt;
-    &lt;p&gt;Open the notebook file &lt;a href=&quot;https://github.com/GoogleCloudPlatform/training-data-analyst/blob/master/quests/dei/what-if-tool-challenge.ipynb&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;what-if-tool-challenge.ipynb&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
-
-    &lt;figure class=&quot;ml-li&quot;&gt;&lt;amp-img width=&quot;973&quot; height=&quot;690&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task2-import-dataset-to-jupyter-notebook-2.webp&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-     &lt;amp-img fallback=&quot;&quot; width=&quot;973&quot; height=&quot;690&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task2-import-dataset-to-jupyter-notebook-2.png&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-   &lt;/amp-img&gt;&lt;/figure&gt;
-  &lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;ol start=&quot;5&quot;&gt;
-  &lt;li&gt;Download and import the dataset &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hmda_2017_ny_all-records_labels&lt;/code&gt; by running the first to the eighth cells (the &lt;strong&gt;Get the Train &amp;amp; Test Data&lt;/strong&gt; section).&lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;h2 id=&quot;build-and-train-your-models&quot;&gt;Build and train your models&lt;/h2&gt;
-
-&lt;ol&gt;
-  &lt;li&gt;
-    &lt;p&gt;In the second cell of the &lt;strong&gt;Train your first model on the complete dataset&lt;/strong&gt; section, add the following lines to create the model.&lt;/p&gt;
-
-    &lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Sequential&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
-&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;layers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dense&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;input_dim&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;input_size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
-&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;layers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dense&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;activation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;sigmoid&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
-&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;optimizer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;sgd&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;loss&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;mse&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
-&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;train_data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;train_labels&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;batch_size&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;epochs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
-
-    &lt;figure class=&quot;ml-li&quot;&gt;&lt;amp-img width=&quot;1100&quot; height=&quot;668&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task3-build-and-train-models-1.webp&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-     &lt;amp-img fallback=&quot;&quot; width=&quot;1100&quot; height=&quot;668&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task3-build-and-train-models-1.jpg&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-   &lt;/amp-img&gt;&lt;/figure&gt;
-  &lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;ol start=&quot;2&quot;&gt;
-  &lt;li&gt;
-    &lt;p&gt;Copy the code for training the second model. Modify &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;model&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;limited_model&lt;/code&gt; as well as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;train_data, train_labels&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;limited_train_data, limited_train_labels&lt;/code&gt;. The code for the second model should look like the following.&lt;/p&gt;
-
-    &lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;limited_model&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Sequential&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
-&lt;span class=&quot;n&quot;&gt;limited_model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;layers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dense&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;input_dim&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;input_size&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
-&lt;span class=&quot;n&quot;&gt;limited_model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;layers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dense&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;activation&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;sigmoid&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
-&lt;span class=&quot;n&quot;&gt;limited_model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;compile&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;optimizer&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;sgd&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;loss&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;mse&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
-&lt;span class=&quot;n&quot;&gt;limited_model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;fit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;limited_train_data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;limited_train_labels&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;batch_size&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;32&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;epochs&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
-
-    &lt;figure class=&quot;ml-li&quot;&gt;&lt;amp-img width=&quot;964&quot; height=&quot;584&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task3-build-and-train-models-2.webp&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-     &lt;amp-img fallback=&quot;&quot; width=&quot;964&quot; height=&quot;584&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task3-build-and-train-models-2.png&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-   &lt;/amp-img&gt;&lt;/figure&gt;
-  &lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;ol start=&quot;3&quot;&gt;
-  &lt;li&gt;Run the cells in this section and wait for the finish of model training.&lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;h2 id=&quot;deploy-the-models-to-ai-platform&quot;&gt;Deploy the models to AI Platform&lt;/h2&gt;
-
-&lt;p&gt;Moving on to the &lt;strong&gt;Deploy your models to the AI Platform&lt;/strong&gt; section in the notebook.&lt;/p&gt;
-
-&lt;ol&gt;
-  &lt;li&gt;Replace the values of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GCP_PROJECT&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;MODEL_BUCKET&lt;/code&gt; with your project ID and a unique bucket name.&lt;/li&gt;
-  &lt;li&gt;
-    &lt;p&gt;Change the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;REGION&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;us-west1&lt;/code&gt; (Use the same region of the Notebook instance).&lt;/p&gt;
-
-    &lt;figure class=&quot;ml-li&quot;&gt;&lt;amp-img width=&quot;865&quot; height=&quot;508&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-1.webp&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-     &lt;amp-img fallback=&quot;&quot; width=&quot;865&quot; height=&quot;508&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-1.jpg&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-   &lt;/amp-img&gt;&lt;/figure&gt;
-  &lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;ol start=&quot;3&quot;&gt;
-  &lt;li&gt;
-    &lt;p&gt;Run those three cells and then confirm the created bucket and the uploaded model files in Cloud Storage.&lt;/p&gt;
-
-    &lt;figure class=&quot;ml-li text-center&quot;&gt;&lt;amp-img width=&quot;510&quot; height=&quot;166&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task3-build-and-train-models-3.webp&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-     &lt;amp-img fallback=&quot;&quot; width=&quot;510&quot; height=&quot;166&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task3-build-and-train-models-3.jpg&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-   &lt;/amp-img&gt;&lt;/figure&gt;
-  &lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;h5 id=&quot;create-your-first-ai-platform-model-complete_model&quot;&gt;Create your first AI Platform model: complete_model&lt;/h5&gt;
-
-&lt;figure class=&quot;ml-li text-center&quot;&gt;&lt;amp-img width=&quot;678&quot; height=&quot;251&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-3.webp&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-        &lt;amp-img fallback=&quot;&quot; width=&quot;678&quot; height=&quot;251&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-3.png&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-      &lt;/amp-img&gt;&lt;figcaption&gt;The specification for creating AI Platform models listed in the notebook&lt;/figcaption&gt;&lt;/figure&gt;
-
-&lt;ol start=&quot;4&quot;&gt;
-  &lt;li&gt;
-    &lt;p&gt;Add the following codes to the notebook cells for your COMPLETE model.&lt;/p&gt;
-
-    &lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gcloud&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ai&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;platform&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MODEL_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regions&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;REGION&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
-
-    &lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gcloud&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ai&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;platform&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;versions&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;VERSION_NAME&lt;/span&gt; \
-&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MODEL_NAME&lt;/span&gt; \
-&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;framework&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;TensorFlow&apos;&lt;/span&gt; \
-&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;runtime&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.1&lt;/span&gt; \
-&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;origin&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MODEL_BUCKET&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;saved_model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;my_model&lt;/span&gt; \
-&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;staging&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bucket&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MODEL_BUCKET&lt;/span&gt; \
-&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;python&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.7&lt;/span&gt; \
-&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;project&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GCP_PROJECT&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
-
-    &lt;p class=&quot;callout&quot;&gt;&lt;strong&gt;Remark&lt;/strong&gt;: The gcloud ai-platform command group should be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;versions&lt;/code&gt; rather than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;version&lt;/code&gt;.&lt;/p&gt;
-
-    &lt;figure class=&quot;ml-li text-center&quot;&gt;&lt;amp-img width=&quot;715&quot; height=&quot;390&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-1st-model-v2.1.webp&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-     &lt;amp-img fallback=&quot;&quot; width=&quot;715&quot; height=&quot;390&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-1st-model-v2.1.jpg&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-   &lt;/amp-img&gt;&lt;figcaption&gt;Create your first AI Platform model: complete_model&lt;br /&gt;(With params --runtime-version=2.1, --python-version=3.7)&lt;/figcaption&gt;&lt;/figure&gt;
-  &lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;h5 id=&quot;create-your-second-ai-platform-model-limited_model&quot;&gt;Create your second AI Platform model: limited_model&lt;/h5&gt;
-
-&lt;ol start=&quot;5&quot;&gt;
-  &lt;li&gt;
-    &lt;p&gt;Add the following codes to the notebook cells for your LIMITED model.&lt;/p&gt;
-
-    &lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gcloud&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ai&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;platform&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;LIM_MODEL_NAME&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;regions&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;REGION&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
-
-    &lt;div class=&quot;language-python highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;gcloud&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ai&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;platform&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;versions&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;VERSION_NAME&lt;/span&gt; \
-&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;LIM_MODEL_NAME&lt;/span&gt; \
-&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;framework&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;TensorFlow&apos;&lt;/span&gt; \
-&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;runtime&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.1&lt;/span&gt; \
-&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;origin&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MODEL_BUCKET&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;saved_limited_model&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;my_limited_model&lt;/span&gt; \
-&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;staging&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bucket&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;MODEL_BUCKET&lt;/span&gt; \
-&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;python&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;3.7&lt;/span&gt; \
-&lt;span class=&quot;o&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;project&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;$&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;GCP_PROJECT&lt;/span&gt;
-&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;    &lt;/div&gt;
-
-    &lt;p class=&quot;callout&quot;&gt;&lt;strong&gt;Remark&lt;/strong&gt;: The gcloud ai-platform command group should be &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;versions&lt;/code&gt; rather than &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;version&lt;/code&gt;.&lt;/p&gt;
-
-    &lt;figure class=&quot;ml-li text-center&quot;&gt;&lt;amp-img width=&quot;712&quot; height=&quot;388&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-2nd-model-v2.1.webp&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-     &lt;amp-img fallback=&quot;&quot; width=&quot;712&quot; height=&quot;388&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-2nd-model-v2.1.png&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-   &lt;/amp-img&gt;&lt;figcaption&gt;Create your second AI Platform model: limited_model&lt;br /&gt;(With params --runtime-version=2.1, --python-version=3.7)&lt;/figcaption&gt;&lt;/figure&gt;
-  &lt;/li&gt;
-&lt;/ol&gt;
-
-&lt;h3 id=&quot;troubleshooting-runtime-version-issue&quot;&gt;Troubleshooting runtime version issue&lt;/h3&gt;
-
-&lt;p&gt;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.&lt;/p&gt;
-
-&lt;figure class=&quot;text-center&quot;&gt;&lt;amp-img width=&quot;452&quot; height=&quot;208&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-error.webp&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-        &lt;amp-img fallback=&quot;&quot; width=&quot;452&quot; height=&quot;208&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-error.png&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-      &lt;/amp-img&gt;&lt;figcaption&gt;Checkpoint requirement for creating your AI Platform models&lt;/figcaption&gt;&lt;/figure&gt;
-
-&lt;p&gt;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 &lt;a href=&quot;https://cloud.google.com/ai-platform/prediction/docs/runtime-version-list#runtime-version-support&quot;&gt;AI Platform Documentation&lt;/a&gt;. Thus, after replacing the runtime and Python version numbers, correspondingly, the codes for creating the AI Platform models should be modified as shown below.&lt;/p&gt;
-
-&lt;figure class=&quot;text-center&quot;&gt;&lt;amp-img width=&quot;675&quot; height=&quot;389&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-1st-model-v1.14.webp&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-        &lt;amp-img fallback=&quot;&quot; width=&quot;675&quot; height=&quot;389&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-1st-model-v1.14.png&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-      &lt;/amp-img&gt;&lt;figcaption&gt;Create your first AI Platform model: complete_model&lt;br /&gt;(Fixed with --runtime-version=1.14, --python-version=3.5)&lt;/figcaption&gt;&lt;/figure&gt;
-
-&lt;figure class=&quot;text-center&quot;&gt;&lt;amp-img width=&quot;675&quot; height=&quot;389&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-2nd-model-v1.14.webp&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-        &lt;amp-img fallback=&quot;&quot; width=&quot;675&quot; height=&quot;389&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task4-deploy-models-to-ai-platform-2nd-model-v1.14.png&quot; alt=&quot;Image in ☁ Explore Machine Learning Models with Explainable AI: Challenge Lab | logbook&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-      &lt;/amp-img&gt;&lt;figcaption&gt;Create your second AI Platform model: limited_model&lt;br /&gt; (Fixed with --runtime-version=1.14, --python-version=3.5)&lt;/figcaption&gt;&lt;/figure&gt;
-
-&lt;h2 id=&quot;use-the-what-if-tool-to-explore-biases&quot;&gt;Use the What-If Tool to explore biases&lt;/h2&gt;
-
-&lt;p&gt;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:&lt;/p&gt;
-
-&lt;blockquote&gt;
-  &lt;p&gt;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?&lt;/p&gt;
-&lt;/blockquote&gt;
-
-&lt;figure class=&quot;ml-li&quot;&gt;&lt;amp-img width=&quot;399&quot; height=&quot;79&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-1.webp&quot; alt=&quot;The complete model has equal performance across sexes, whereas the limited model is much worse on females&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-        &lt;amp-img fallback=&quot;&quot; width=&quot;399&quot; height=&quot;79&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-1.png&quot; alt=&quot;The complete model has equal performance across sexes, whereas the limited model is much worse on females&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-      &lt;/amp-img&gt;&lt;/figure&gt;
-
-&lt;blockquote&gt;
-  &lt;p&gt;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?&lt;/p&gt;
-&lt;/blockquote&gt;
-
-&lt;figure class=&quot;ml-li&quot;&gt;&lt;amp-img width=&quot;397&quot; height=&quot;85&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-2.webp&quot; alt=&quot;The limited model has a significantly larger delta than the complete model, whereas the complete model has almost no change&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-        &lt;amp-img fallback=&quot;&quot; width=&quot;397&quot; height=&quot;85&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-2.png&quot; alt=&quot;The limited model has a significantly larger delta than the complete model, whereas the complete model has almost no change&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-      &lt;/amp-img&gt;&lt;/figure&gt;
-
-&lt;blockquote&gt;
-  &lt;p&gt;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?&lt;/p&gt;
-&lt;/blockquote&gt;
-
-&lt;figure class=&quot;ml-li&quot;&gt;&lt;amp-img width=&quot;397&quot; height=&quot;56&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-3.webp&quot; alt=&quot;The thresholds have to be wildly different for the limited model&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;
-        &lt;amp-img fallback=&quot;&quot; width=&quot;397&quot; height=&quot;56&quot; layout=&quot;intrinsic&quot; src=&quot;/images/posts/qwiklabs/qwiklab-gsp324-task5-what-if-ttol-3.png&quot; alt=&quot;The thresholds have to be wildly different for the limited model&quot; on=&quot;tap:lightbox1&quot; role=&quot;button&quot; tabindex=&quot;0&quot; aria-label=&quot;lightbox&quot;&gt;&lt;/amp-img&gt;
-      &lt;/amp-img&gt;&lt;/figure&gt;
-
-&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
-
-&lt;p&gt;&lt;strong&gt;Congratulations! You completed this challenge lab.&lt;/strong&gt;&lt;/p&gt;
-
-&lt;h2 id=&quot;-demonstration-video&quot;&gt;&lt;i class=&quot;far fa-play-circle&quot;&gt;&lt;/i&gt; Demonstration Video&lt;/h2&gt;
-
-&lt;amp-youtube id=&quot;yt-UzP2pX1qayA&quot; width=&quot;480&quot; height=&quot;270&quot; layout=&quot;responsive&quot; data-videoid=&quot;UzP2pX1qayA&quot; title=&quot;GSP324 Explore Machine Learning Models with Explainable AI: Challenge Lab&quot; data-vars-video-title=&quot;GSP324 Explore Machine Learning Models with Explainable AI: Challenge Lab&quot; data-vars-video-url=&quot;https://www.youtube.com/watch?v=UzP2pX1qayA&quot; data-param-rel=&quot;0&quot;&gt;
-  &lt;div fallback=&quot;&quot;&gt;
-    &lt;p&gt;This browser does not support the YouTube video player. &lt;a href=&quot;https://www.youtube.com/watch?v=UzP2pX1qayA&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Watch on YouTube&lt;/a&gt;&lt;/p&gt;
-  &lt;/div&gt;
-&lt;/amp-youtube&gt;
-
-&lt;div class=&quot;language-conf highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;⏱&lt;span class=&quot;n&quot;&gt;Timestamps&lt;/span&gt;:
-&lt;span class=&quot;m&quot;&gt;00&lt;/span&gt;:&lt;span class=&quot;m&quot;&gt;00&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Start&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Lab&lt;/span&gt;
-&lt;span class=&quot;m&quot;&gt;00&lt;/span&gt;:&lt;span class=&quot;m&quot;&gt;35&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Start&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;JupyterLab&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Notebook&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;instance&lt;/span&gt;
-&lt;span class=&quot;m&quot;&gt;03&lt;/span&gt;:&lt;span class=&quot;m&quot;&gt;43&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Download&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Challenge&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Notebook&lt;/span&gt;
-&lt;span class=&quot;m&quot;&gt;05&lt;/span&gt;:&lt;span class=&quot;m&quot;&gt;38&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Build&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;train&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;your&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt;
-&lt;span class=&quot;m&quot;&gt;21&lt;/span&gt;:&lt;span class=&quot;m&quot;&gt;40&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deploy&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AI&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Platform&lt;/span&gt; (❌ &lt;span class=&quot;n&quot;&gt;runtime&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;version&lt;/span&gt; = &lt;span class=&quot;m&quot;&gt;2&lt;/span&gt;.&lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;n&quot;&gt;Python&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;3&lt;/span&gt;.&lt;span class=&quot;m&quot;&gt;7&lt;/span&gt; )
-&lt;span class=&quot;m&quot;&gt;37&lt;/span&gt;:&lt;span class=&quot;m&quot;&gt;09&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Use&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;What&lt;/span&gt;-&lt;span class=&quot;n&quot;&gt;If&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Tool&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;explore&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;biases&lt;/span&gt;
-&lt;span class=&quot;m&quot;&gt;47&lt;/span&gt;:&lt;span class=&quot;m&quot;&gt;18&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Deploy&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;the&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;models&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;AI&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Platform&lt;/span&gt; (✔️&lt;span class=&quot;n&quot;&gt;Troubleshooting&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;runtime&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;version&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;issue&lt;/span&gt;)
-&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
-
-&lt;p&gt;&lt;strong&gt;Keep on reading&lt;/strong&gt;:&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;&lt;a href=&quot;/blog/qwiklabs/Engineer-Data-in-Google-Cloud-Challenge-Lab&quot;&gt;☁ Engineer Data in Google Cloud: Challenge Lab | logbook&lt;/a&gt;&lt;/li&gt;
-&lt;/ul&gt;
-
-&lt;p&gt;&lt;strong&gt;Useful links&lt;/strong&gt;:&lt;/p&gt;
-
-&lt;ul&gt;
-  &lt;li&gt;&lt;a href=&quot;https://github.com/GoogleCloudPlatform/training-data-analyst/blob/master/quests/dei/what-if-tool-challenge.ipynb&quot;&gt;what-if-tool-challenge.ipynb at mGoogleCloudPlatform/training-data-analyst&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://www.tensorflow.org/api_docs/python/tf/keras/Sequential&quot;&gt;tf.keras.Sequential - TensorFlow Core v2&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://www.tensorflow.org/api_docs/python/tf/keras/layers/Dense&quot;&gt;tf.keras.layers.Dense - TensorFlow Core v2&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://cloud.google.com/sdk/gcloud/reference/ai-platform&quot;&gt;gcloud ai-platform - Google Cloud SDK Documentation&lt;/a&gt;&lt;/li&gt;
-  &lt;li&gt;&lt;a href=&quot;https://pair-code.github.io/what-if-tool/&quot;&gt;What-If Tool&lt;/a&gt;&lt;/li&gt;
-&lt;/ul&gt;
-</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&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<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">&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<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">&laquo; 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 &#39;gh repo clone&#39; 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 &#39;gh repo clone&#39; 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 &#39;gh repo clone&#39; 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 &#39;gh repo clone&#39; 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 &#39;gh repo clone&#39; 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 &#39;gh repo clone&#39; 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 &#39;gh repo clone&#39; 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 &#39;gh repo clone&#39; 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 &#39;gh repo clone&#39; 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 &#39;gh repo clone&#39; 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 &#39;gh repo clone&#39; 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 &#39;gh repo clone&#39; 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 &#39;gh repo clone&#39; 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 &#39;gh repo clone&#39; 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 &#39;gh repo clone&#39; 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&hellip;</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
zVdF8kqeNCHYE;u{<`)9NwaAwbeLiTmHjZH#>pP2?-2VWZch*)pClFI7Fzl<OW(~xv
zlwK*d3<?%7ceC@fIMd1QOsU5?2(PK9qsX6l<>n5KRmIAMleFsX>1{GLA1z8y(*FRG
z<I<s<&Ye=E#am!?u}}e*nu{Trwz`~<QYPb2_vwS{?shu9-guU~a^Op<*U4O2*eQFO
z4Zx{K_O-cIl~K(V?+vmnIGhYC!#c{QzCthx60uzkOY0QHsUoV7%Gq!b9pI`4_G7?m
zHeQd#OK?)oY9Bp1n-h$$@-tMl*>`l<)f+M|a@!8-ZMYy^X@haTC?sZ#o*;}ht}xV;
z1?y|ATkAP{l#>f<J}L(Er|A~XcChLLm>vVk`RiJl>WosY2bq3f?zwu6G<f`M?Gc#=
zZ2k?S`F|~hg=_qNRY9T4bm3pB`kH@}t&-35-zU4k_>JxS%UVUjv_Aff?4yUqZ#44h
zu32-$)pe$kk;S=I-E36CYY%IO@8eRX&`5)+MS6w__2brEed-xfUbVW^(MZ$ruQAtm
z-HJ<Ayos}bb-r?)z4f)QhnNO!q(YlFjK0d$)+MX$ZkFfv2nnr5-QWpl6vX$(n_13K
z+Z0SUS7VER3-c_JLmBFFeq<0z;?gva4+MuT^|nvqymGs}qo&<bf`wKD!8NpksF&-8
z<7iWt=C7j_itg&s{zta)XUZu4?b9nE)QiSHBchuMXi_3N=9veMQ=uwQb3?4dm&!P=
zN|1-%P*+_BEh08b+1yj|-FApz3yJ7g+Kcb6EA5Ryak?TQ+$!RG&J4erYC)i2sBSvy
zhS3-#3Ys~#r7Su=wL`h4oZczcHG>t3_x)J25^=<S+-+UfwI2pMf?DhG?a9mJrncmc
zm^o`bxtNPrwL%O|IiJfkR%vlqQp#51L|fjhGJ`i(zSYOt7`hZqiqEw-4=GJfPses_
z=ejC#>~Q7s49n&n@mrnj(@8BP>IIu;Pk#AHF3XNieZ{2R#A}I@TSJO+jJ)a4e;uWk
z!^R$no^7}2k~w@yCo}W!cT4hd_~#G0R|!`s8{9rl9_Apmo=4u$<(Wd_V#z?(s~Osh
zyUwz7G4P9amFHUsgGpTKEUL_CYcWgwlb&f>M}Gaj=03lEqpsijj;q(mrEv0xHv90r
zP_meY8lCLh6R~#Mbccn-6MJMYPL}qIYe=%PPt`s(&lChuO)-I8wyT~IK0~*xu4oT~
z#ADpPN~-a}k)y=jmb5iCEGf7oVWQ(a=nPZu#W3ZyQLbxsrQbyy<ZNB8Vt+NZ{o>Xz
zuqKv28~~O+rvAm6Ibog64<OdiJWODM&>_-EW?pk?(&XZnv<piwP|<o%g1Qb+BBgss
zh8{D@9%yV_RaT5XHH~SZ=SxEykmqJ8L{EE>knUx+zKc3_1&yewP|KFGoiLTjwZA&d
z`}^kitn$sduiSI!ikFX5`tk_&xR(!Fe|;$U{9ge$j`!sjiZY&kC%t%|9nZcf9Apu4
zWbUeEyQpZmxi2F-IBhP>kK@S+W#Y4G?a+ieO=@OhC=GU3gI<P~I$1q;)uRyY0T#r$
zC3&U139Ve(YF4eTAs3Bl>*p`=Vo@@R;}Gs@7JG$Ns)Z;Ofq{1=v7lp>Q{&lci#KbI
z>n%leN+AzpQbl7F%U;jj#;G=DYQckcD%}7xP-0KrIhq{W(|#wXtxi#v_LE{Yc}lm$
z<r)DrN3#zcYSAb)t{g1(HMf^v?rqI<TBjy2$1NkPs@YUR@ox%g<~UY_@=X+v^J4E5
zN?fK$ZSrj_)_AzmS7zpQ4sQB6RU2wa$BKfgn%WtLtKnevHDS0tiX`8=Z7v~LlTK(q
zEktz36XA?Hn0L2(&sdhP%Li|`$G+&d+7>AM*+Vy)9=xD+cxw-j=Z{x!H4>Kerf(nO
ziSqXr)4gnsA}UJ#eL9mGT1f#Q68BFC&9AP(8URIuid~ofEl)rUJa02cH(|_onr0E<
z_@S>SUPToue8IN3P4T}u264Z}*|nezEID}4=4Nq6!6P9$$lTD#xvZtdHI3d}z%;Yr
zmo77}x+0PayS2MHTN?~!H77fbD}c5m3%j6!*$8SJ{(JLk{z@v~>0sjF>83}AW_brM
zjcnEwx~$L#U)mCv^6Gk?yG->#+TE)W_o_f5ngF<FPWOzq6&X%+UuRy+`2^dfrRk}0
zQpUEADIFRdIuWoyp{%_P0#-|F7fT_;L!<0tHs$S1%|--}uqcA+w9XEl*b4I99TtN%
zK8XdR;26WcU0ylH*)x#GDm!LK3n}oQB9z-|@7yZettRb!%dK7ScC6-BE(*1CUILv|
zRAq`#3k}_3D{BFpA(N)?Mf5t*K?Ziq>#${mBZ}(crP>up?Y91BBG7Bax1oYt3uS)@
z_>nc@>P-@3Ht31Ehm5>doC7oL+Su&^^0kgjsl`I8+?`qte!z;8dy>s*AAHomnDWMe
z54!VeP`rwnqP#$qD6};%qk2!oCPt|YV>LmF>M=~bETCJpjI9E-N=dll`$jgSmQZ%I
z4e*6})FZc_U8Ah9=MXpdz{K4@7wxB(BnGu|x3j69sLDu!e~2^h5ft;AZ8F0eS14B<
zs=e-)@nb=nSly%Y#H5#=k#Ybbb{u#=RJ0K&OXD%;IvIKyrkR5*@6J$0Cuq6!K|?|9
zYIL(Sz1Ll7_lv4l^4rU91xnvT+7T&W6SBXY<?m-Nm&wIZ99#z$ZW>o@&t<(#J{YS=
z;-~W6H4boqH_?-iKSEn^_o9`6<sG<RmmE`SF`32?E>1f(YSd`}5T}8jEAk#Hbsj40
z($-kghHkz^!<}R;Rfx@)Z81_C7Q^OFmRB5LTe$fL7j1fmXu?;U$ZsE4<3{e<-d69>
zSal9u)TFE&;}0xp-bMUDtXyPAp{#<2HN{Wx#sWN#MK-QNFaDi=Br1({<n-H>`6CAs
z*F8di4m8s9np;j8_SVx8ap-HeZ4PW#8Pf?)p<m%Td9=%SW^X~a!>~WZ+?7?Idgxz=
z@a!QmZBa1UxmJ2P{Et;!`*&5YQISTln*&pP;&T;Mo7Gp|IkI+@a<4o+GG?lMQAP0z
zq<nst%~JFoo@|G%LW(1%$jhgaC4-@graV%Yn;rf^^A*|zhVxJ={(&n%E@RmrO}V4J
zrnsjS5%gO^(dPcbV1fE&!cv)*baWiIAI0KGuy#?x1v-aId$+Q0*LUbtv!gj_y|hxv
zIvP}2pv5U&Bt<3|%OPk>1$_=gxT)<fp~V|KboZo9Z%+;^_<X0&d4J5`%VuvBGXQKv
zO6}?f8kUIIiAX}sneiwk%lWCRR#)Wt82K@mpZs$JC@?yT&*(M`$-RMPmd?D^K%e_}
zEZW)%EfT8K4X-rOwyuzq6kO9r?mf0{{Mu|?)nIj+3jQqSV4TM`Q*{Yc<XVxQzFHzD
z&07bPV;ovUi?FsYB0vXXB^J^nH7oq%Tr1J5)0dbEgh`6<QiOBIIFU|I(Ek7nTA7Gx
za%N+-cxv=6qZ<wWpi*7g(LaSI>?47F6NL)<)z0KRJ23?4;zg|8CX6q0QR`ZIcR}|V
zv42&1rm-lqKp?Ao$%!=Zn@^A5NWE*O-5_6K-ELV?s}g<NSw?O=tjdqHV1-K6X>NiZ
zcM``M)bmJIonb6}Ju#{&B3dVk6?TDH_SD*BHi_@&N^H<nmn#-1g{$OkO+i*FJUWX{
zJ*G<op`6Lbqaz_`Sqhd(F|rx>%L{GL{5#%GIjFMhoQ{ABTQaxDsi`ozhVVs^lNFx%
zjZL`bB6@q_&n;s(6UTLy<>lk5X0UAURWp#lZ#(j|E&%A@pM(zsW`?1Ukl<Cl?S;tm
zmQe<h1tiLlhf`%+2x%=}wjnG<#0j|^e#6kx4)h-_Hjc`5(F^QpR|`%fjXiwVLU$=5
z>q9pATP`K_?eUx5A6~ZU=TD337L!YYN=lcNy`jm;M1mXRBuDiSPKA-$oM$C{?Qyev
znMpcp@vs5_JGaL-va|Ue-XYIb$4U!_wQFb+CyZ~Qm2E)2t0q_cc%YDNKwttbvCH@N
zvTL3}Pq3KzuAd^~cQ*8{z<AM{Yhuo9FX8?TQDn_VoiERtc>PaP9r_ce7ISFDY3(bT
z^ONGThcxH<Tg{xTS~6@JrRavd_Lp`N2TFQ9#TKl~nh!H&c!vnjy?#C-<(bl=p!UK#
z0<J!COw5>_0N0`hE$=>T9z3mn-Dxp7X@@j(-0Vo<v@<U?fy4F~6>x-+pWYQzaK|--
zxUD()qSV=#nY3w2CK(6cT^3a*C;3oFwr%Qv@TCK4_i>hno`cR)wZavQnhToD_{~PO
z)+MQOu4*+^C^#Z1jN#HORB=0h7C5;#hkXY$wwS(7&cn`JV?ofUvf7LeYh!WLjXZIi
z)s1@Dk<iU=<MCC76r>EF2t#G|wlpRxs5Y6^V?#m9UVvUWwbN{@J4iRCsxNJ3edjF@
z^I7pwROIhGi6&g+8bPBcxbQhKxQm)F5c}oL%oX6=qmtfa0v5M6<aWKkL~^Z=Xc;VA
zaoSPjB^CxCIMAjgzB!F3uA;>K4;PlQZ4E0aG!{~3<YvhV%TSDUq|0V`gF6<fL&&tK
zyebigz{!i@ux4&pawD$^>3k$>?o8~CXD^V{G@wQ>2s*k&D<HLNTG#SdT(yowPdzzT
zX#)xM+W2?Mr4t&<MS@bWg$~YG1s)KIrt&e~wu3I!icn09aYN>`%`!&c!xrtJ8+qqQ
z;fFJD_f^nuXG35}61-=OwtF%~^c^P84nss9$XaA9vK~q$35%q^`h_u7)nN7>TglOc
zl+Aq=+<QjK;OBaB)4}AKcPfI`=6u=94skMQ6m<DVC=RnBK~!B=MQ$m-nwG=qo&?D8
zIToWj;Kg{AVZs%P)M8n)-z~Sp$Q;#b^>>PJuX!pPR7SlHj&@2l{M%X*0QY#Ii8amR
z+OKrJsp&QEg|xMKC<CpPO(o*~_6vR5R`W47)p4XfO4DUkWae6&jIHuY(P|92ikaOs
zm8onieno~ojS4vPmP)r%@^KHxyJ_arLB?Q~_C`d7TspfSWEKuWt>#g{0#!qQ6N?st
zNtLg9a`Z)op|ck`nx0GH`4QL72%XQ+<b-m^$3_EW{W$dtQq;BcS*&OJ6{&cMe_>$s
zhoW3mA8j_{GLHq}*}bF~i%qI(2C-3AgQ?&0w9kK{9@7yqZ@V+)^%M1L+r7JYnVkI+
z-}q{l&_LSFRbJjDbmQ$<rTY&sA~O=vqy0LsM6%x7RGFZZCD$MuG}3*=oN&yvI>$_i
zG<IG!pyWHFgUfVM`g$qweo1hV$~?6kL(>$8l%{F)Z)G?5tY(zkATcjxxb_Q}lt<Z*
zZ$l}B^b@&57CzRF^UhePCv?QK0TgVe{eAWpQyFo_mZ;)vzVZ1s@Pb(J25w5!%ezxZ
zf*R&%nM+A7E{8S(x2=Iml{nG8nR7_6qJ&xPlPD=p$YXAoGe0q95kx0AH*#@Wy^ozT
z!Y-LDlISwC>8qv7UvSDotr#LGo_zNfbQsMGCy#O1gY1?bcef$u8vVOh!)s$dH4<R)
z``Y7FAmJ!iLApiu`1WW*GjfgTy}=soPDZxtSM1|UkQn*7Vz2s!w@Hb&?5iH)`VE^?
zP^}xpc9yCx;>{iVQBRwH1#NQ{{@o|^*SB7MCg~Pl7dRqBQsOemAvNzv;+f+y+j*Ie
z*}R7map0cV?M`L|tomoAW5GbQj(|!AI~PGEaM~zOYtjmK=mrWF?C_tRbtl_1by^s}
zNhN@_BDZUdam3aYcFND30lz!dmd6)3bxK_wF;@M=SzP(i2BmLZOyKGzeDfHQdvXG)
zmXgM)<hemxlWRyd4_x}{;9=W|-!nT*3MZ`GV)5)R%H8*dk0DF*Pk%v43kWNfUUj#4
z*OK3u@eVVOha^XnUe?71h=X@jxT-!pIofsC-LG(L?voK{kkT)v7GUn)Dzxiqs>Y*?
zNG-U*`V-g`W7!LOZXXS(5o;w|NOgZQaW*^$YkY1-;WNEO*J^_ExSro@dsgdYQjBNW
z>2*0&{>k?fDw=Kyts=NvJ9*0*5Gq6+_Lw}9#h-BwFUj<&6iXfA(H};6n;oRXQAkJ7
zkW;nvx8`9#M|cwPSt4vRDDe&?hi{95g*v6EI>iSSrEFfL@!EQpA|tm(XX<}>=+5@6
z_Uba5y<*m=>lDKB?>1w%T)mL-;gT&EwfILQTYn$;a4|YKzwLW>o=~8G0_em<NdRld
zXr9umU=nu`?jhC3lAwk)N$%g}*rF}Re*JNrTsH7kbW7ByTL&eWG#wFId0H*-_Re+b
zKbLT>R*xh?+2tpTi;Khh%=M?ai<&u?-&i%jJmWbpG#vP3=x%z5v-4kPD*f}dt!8Zu
zg@0-qRc0V@Vd=MqAZbyeX(bkDR02GbrOzZ<kGyJKrJ-MXoMenSu~$#_JPcy|5^36l
zDV$dMVqMqtqvcmj`gN6%4NrC+wpGWIluvU(Fktc1g=$fIH=n5Mmm>1rjBT7=FcrTz
z7Cp@xx|_jM+g(xTEsw>n*#3T#9}_=QkzL_e2ac(A(2Hj9uz6miYjZy)Z|BH)Id5U}
zA~5T@*;TAdECgCxiDioM2`!^W_4T<0#}En^j?W!t<shv3<H1^<42sM!;x))U;age&
zqm@WZl9lX9{{Y<e<Iq<r5Ff~_z$Y>@bu72PQqC5vtp{FXzfMrK{bSD@2UWo^z$;43
zbx)IWTJ^1_UD=%$K-PkEVEO~)+d+uB^id>cu*k!dJG$}h>{+Ep@4DS`{{SiCxwM<s
zAS{fx5dG?O&W5VT)qQA~3LKHft2LOsjeQ9z0ec42nMk$X<lgs`Q*q@q;3)}uj_UE8
zuwmPcHKGHUG|<dUSUi^`=FikmkKjI|YiF|Vh_dzqmcFe8H{BL&W1PZpJ`7yjyjV9u
zoUvc7J)J}q&du!|`3Adf@)>nD2~MsI=NZ0!d-EAEbQ{ULu26_^(&&*D1sWubb+Sh7
zukr!MOF_k#-a=Bnq)zjDvybXC&R8F-E_s%Qt9p63CM=`rS1%;iO+^#vK9H?9v9-A*
z-pKlW>FU3BOzqtvV`oG{80aq(scX}`->G)f-aM<{=6;^n`>h(VyF}Z(e5s$>daGUf
zvp@d;De8_b4XUw^1HG0UOx9xa)a0g7T0N<)xrVD*N|=5#Ry{T4<JC{{cJKbGu|U)H
zTeNzN{{R_hjk*SO7L)O=NahxmA5vr7{{R;Hv#0i!EQYhjy;a#Asj00{gG*L37PKCG
z51I}#);ijG_~1Cv_T&_iilUEJIP+L+#-cGWho*eUS(<R8MYJlji5e{`oM(<uxwLRJ
zk^G#j^$YSYIQU9%w1Y?F+^0(32HJG}E5tc7y{<gAt<qkUa+a+SQLYN+`YVzy*3#5D
z<t`1w^JbO?IBkAQ#Uw#185K1I_KHUFURb?DLXv}s2*;4Aju&lYGi*;}_nfSG%Um-o
z6Ez~{<C+@wrG_&0-ZR>haU;hNJ-Duu8PV-Em4?1&EXxI%_ls1Yd1px?5a7JGDBl`J
z&})4&LWpVB{>=m(td!!iJgIq-PR}K3wsERZNi;yx$Z=E)a^rDug5_c?wv)*)+qw>I
z>=MMHhh=1*<jvo^UN*|(-MdfA*_lH*3_<?@yN0Gx^@p_SCLLIX^$7A6pvKY8<!Pa?
z$7;Jq9g;RmPyn^N%=P6xD-Y{cbeFBkS8z6Rt5Y<z)}g=3C;o6+@4s~6d%sy9AFfmF
znKtQq*O2knafe0&c`C|jkKt=xT3(0Ne<{Z<;#UZBmDGAFVrMUUF^52m8!9-rgBWDf
z)Zw?GZ(G??Q{977JK0O+T$;(~ilhaBQ7i8&FhgXp7Ft%~6)9F}%Qbhk8PAJ*h|d}L
zloM;LN#o6Aam^|BhaSxHK12R4l@WG?&*r;4g$J{c%8uP>@_h;~#~07iwRKyHXgJ&2
z`XL$BWu8l-4Hqd&XO;3T$KHP5M!~WOiDN4^Z)K(8WnLwo#Ykw<LQH+A9dDj1v6Ujy
zZo@X}jg7i2^B0qddau}6Uj424mZOYl<i?U@tet*B`9GbDU#h((wXGJ2y>zWKxbG3v
zoVB-Uw^eF?w|>3*e@W`5A+6#%+GMiY@Hk<6)2gyccJC2-2Ht)$GEJ#f={>uWdMfiv
zO{wK>xt_aa<X4&+)awt`9xm2E52>cQt~=`o4PLYH&UWp}IemFe?r)1#>5!hDhN`M(
z&7r~iRPl`!+T~FM%k+naPy;Qcmm`~ToADj$0xfGT#yJ@Ib}&pM`)vZZ_Uq>n7WJo#
zOb9%QZoMNPELw)|n`>rI&7kMnTwVFdeL>X7dpUee!Y!M@d4P0Q5waK$R61O57-}ha
zl2@EHLw1)sA2I>Q18g8YGxWI7EfNH(ovP9X{!I#ZsEy;^l%XQ!F#E{>TE(3Wqr6@x
zqdX}80MD*yA|kVTxvWU4W${N4Qy!!?ZPAJh<bln!YEU5Mg?g3LLUM-RF4kapva&p~
zy~{Tg>#!{r)ki8Bu@Yd~OX?3wwLX~t05BE2EOA*5FDt-Kx+bBvp5v}kGi|&D!*@6;
zeddz$<o9+S9Vn)7(*R`ZzhTkHvdZ!eCUk3;oV^4mLHUM~oOKfU2C%mN&uY)Nijy_b
z(|>)+c27Jf)_lyIgo{P;ebm=y-ERB2nf6AS`F-I^md0WV$t`Gk<{dY<S)Seh01hHp
zQi8F(Xf8|1bMKk?Ox$-T8c3Eo4KdoO)|DrF_UN~)o=7XrZGp<f(5{Q|TXng{n9gdx
z)oew=9OG#tjV!>IoLwKzeoq*!$Pwr@$rJ9)7f-BxYUFYYj19?BcaK$@+00@L!nky(
za{Q#&r&;J~Nv_~ky$89dwpLHaQf&=z-bl81wB@Rn_fA<ZgWC4YXtAH~=;>Ck*7jgl
zhqos&K@20yDRMc|mouegIu~K{@*5X9cb?73aczf+uO9h{+79t*g^NqyeY<KoOjNH*
zR@;F@WK)kTG`Ry#Gni!RUi$0i(6PdB?_R>I6?L6%L!cQoSq_T!zs=A!TwRvx3so%d
z8e#6ap2S{kti$Lg#9u=i^I(mT`*fP#Vn(UhnWY3vkQ{4h(^|^D6k{>99hHe#^5PtW
z72SOdas)SSku|Ss#cLV~QPr+1Oht~v37EB-{<&t#97pficI5d$?fS22owwVs`doIc
zUO^C3uuE2IP8;dR72e~k>70!njyuD6DD7`!j|NG<#WQvCh>QSX>c@W{Y?Qq$yPSJj
z9$Ai-nD1dQ5YRN5(kI8&igCRTG|J7swH)-_jz}%Bv5LLTdL_=={d$|qW`xA!>dj=g
zE9P^V9%HbpN<}#<k$&*h%&*IsuWvc6`WG(*{{S%ibxuc?f6`8wLja*bUcZPxAICuw
zb#58L$^3zlb$%Jdf%o&6qyvd!8a$QIJ)qo7<NH<4h<-(qNRr&MQzVxqUe*b&qq=-k
zoXIQ&^h0^f^tZoa>+M|ge@}RfEdl}_$#xOZ&T{$XqPewOWO%C1cuI-Ihq}Cf4Y#N>
zTVjmuBES{6X{E~M$sRLBF*%<ir!<$!x3Tng8%$L#pt~vA&2;dVWW*D24F(g%#~ppI
z@Vd1it3yG7l;(DdS;H=b!FO&nGg-Y210sMv23Uy|z4qG=<x10zX7)C&g)bIUie&!)
z5_g$eC45Z##g-LTqG7~Z*M^_Tb01wL!rVy;mX?b!i(5*_bhvv-<&#8iE^vS#COhPq
zpL4F=X6ZDT7zjx)I@h#*n3?Mzk_9v+a)Q?@I*e#Y#&{I<JWU1>fTj>ru1Cg<mYoKW
zOi-V0m}*xo%Kl>|;^=5pWW?57y(h=_a;UkikN`?OnU*`r8vMxN(;gxrW`G6sbv5^f
zK$4N{TLX7`ka0M**e0v|jKw1C9?5l<PEaw(&n%j#rlEC$!Qd9IeMRj1QX$QG1{$*i
zFlz%OV6iS1wS9H0aRdug1J@au?561`_|IXqdQ-f^{F&Q~E;_=phZ@beL`sf;oIF{(
zL=XXsKHhwM-E}jgLE0%oNw1pqbvc%S!T!i(h2m^`UsqFOQ&^?%oK{*-gmS$Y_a98=
zCf@<u&CFv<$s5LU`%Aq>RvD^JRPwp#O|Bq|M}_i8<a}&QhSj4$q2P7*ujPJL5K}O(
z$wVT7$1`-s(&n`e4_SF5w4jsYf+_v~09m&qwN)Y_$>SS5dX%ooL|`GwF&yUC!(;)t
zw#ZzGsh7@97gAw`fNs+rdbh?J%zoPo(rlNf+|0aZVlR1{Bq&0|8)NolZ*vYRjL*s3
zMw9B!*BIH;MeKq}4};3K@aW9uzjfz77u2p{F?+iFgEP}EA&EZr!;<?2<%%G*FPyLx
z2A?gZruMrsTe-_GYxs|&Y-$_%XikRC^?OW&vjN?3eZ9!EbRJ3f5jN;Nf|LDv9>r(>
z04a{ErF(rv=eNk4e_s6oqb^7wNi@D+EcYg(ZX>D`432wEZ&$ExxnaD?nh_?_+7yhm
z_Ss^j0V0il+71N@&6_m?UT4hsd-<nE<+GPnU|-t)D8*udM25fbdys)v-@q@JQV<7q
z?RCi{qe$Q=-JgOLyts@UYipjKPit1V8KP2_?)zyMjiHX%Z(BU}Zy?mlW%Fqc_N0J9
z&u=n^6T@6t%tMdF>20)gVvwz}f0e&Bo;aPNwwrCl&l*C(um1pPmavdcb=VzzFllix
zZH6ystH(Z*rfU7>^jfNRlakdf?WAd{6fuh$W=%ZN=B;{^z2mfX->giaxpSE2fvyH0
znx46ND<&;Dr~m<LWT;ST=3hCQ)-C20c~0noMZ|uJcazRJZ?a0Tw-9#f(cKqT%>ek0
zW3x&j$x}IZQM$WAS`#g8!*Q{GYYl2zwug(wbbwXPoqKDV>1k-9#j7GqaCZr;?eA+l
z$>__763bMgY@&6)HB_i8mjj|HUXk0SIUT|=M2;q2*{O*U?#-Z$0Qz*b<v!9uITU~(
zGTD@%w}L`z(4%*fFWQl7-ujhvfu*;%N9?1eXCDqyG4K`&OH!HRRgzz*;oPmoB~^0%
z3jBN0=Ch0M8(NgRJXy>J_pyD*yl@^&jz=>(a9+tXQq<xkpRm44^`!aC%^td0I)=>?
zQ$@K6u4g8b6D0Jzit}u<8QFlQw#H8<IBx*u^-|lMLzLb6S8qUt9`<kLnng&L?{7}F
z)Y#%-8nZ=@lN)t>v~F1-*;oy(W!M}LT(1{Hit<ydCcMuD=V@<XQ13JVw*LUA{3Qst
zxwg42%l%!;*2>V!ODvZdZ)#h{e}8%RBx?@r8Zvz}=CAgV<B$}eL-sG8YhPVolf(^t
zo=zY%tv&rs{!=6HxNTT-LwJ*4^!KkzalO4bxmqoR46YBB*zYSp^Ezi2h-6kHMX&>{
ze^7E#dO?$nvkU(K@;-b9o_Q)?q!;7-ha$S9OsUZPK~s`rJ@uLC-Y2NE_w8!U#iG1d
z^;&uk+ab4W)_O~Pcm8`vKyYM;n%}64M8wv5$<{LWi0?BAXo;G~-;C*FQLELEU)gOP
zFOl6R#RFqs5i_Jz-c}pV&h(dtDKb+C&eQxo#^|lo9y)^;E#Qx3x7<I*PPvDz;Bq^6
zReexLaf|hea}!`^YSW_B+>0CYo!<++8SQ*W4)|?y>WGW-VxC#EQL5>5-!X?b5L3;d
zCN5SYonK5zOou63S)+Sga-K!CS=&m1#!_~4W8QTz!<ReyX1osOzS}U<J-~rgK7eA!
znxUGxEppg73l{T5{ewtDdYRUkqO>Bb-@Mv-nfyKKR}~=EXSL|10O!8B3ay2cR7pkR
z!&-hf#>u;pG7&M4pK_2yUPp^{Zg;ktrHHMSe^TUsNcX8?c*~UVoPaJZin!K8A!>Zx
zBgvh*IoOKQtY@S-v-%;gTMrj+TE!S<y<IF$I}`!I^R$rO-+p0v<7v1ZEL0d=`dFUm
z4vxH1Z~A5jT|rHMNvj<nUSfn8CQV^5XuZre*E?4EM4xr73ZBTS?v%tQj3(+oO?iXo
zp#-cV5B?*0)^66G*x=gyFGmA%0<?Ry+||%eadJ_LOBnj0<QOSwDoLb8=}-J;zo>X*
z-@>q#M1*&YdTY76p?aE^RW=_-92BLma+UsedQAA<l#H%PyT}V*uCR_Az8!&>=`==w
zA-zrTt68Y#Eo}|r7V~T0w^_WJf}04FTZ@u<eUHfp4dNaZdyj2xa6U;EZ9<M;_1le#
zKhfsC#k9S0+-5CQGgVuy-Q8V>VZBFea;1T_pduAKrq510lzq*FvcO@E>v~beb65yA
zH_m23>5l+!E`5xy(1Th&oAbG&74xZ*TTA2VsChMMS@DkX+I?~2lm*u0OH;IPzf|ze
zkt%X#ZWiD5ONfGP2*#r`%lU~pAZRkJ?GGa}ed!>w6nOnsFIFTai51lJXN(03JXYP)
zjy1;ka1>pv+%*S0y5j;SipN^)SnXc-yv*=RyE)Iz^c?O!cwjn3_7Mx9FC4+&T#jNn
zCA+CQjqMhs*Q}j;*8c!@j+1(%t$ydY%l9AOJ<AT&n4Yurs91{H-8zEr3L^2^%D%#c
zs=5==lp^=Jm9Lc#1C{R3Eo%#B)qX7kGQwEz)i)O{Nn*NXda*Gl{r!du0NC~`G{?)e
zEoC*XNo3P+a>{CGll2Uyn<1QyJ812!D+0*d{>@iU({?y}ShS#FCR~Bf<r$S;-Sbc_
zjeEv}b}95+y9`*aF>KZe?O#YgqK!#US_B^;kJf5oTU_<IS{Y~vjRwCiQN5Z#EUs$5
z6@K&hcKkD~S2N`v{fd^_zU>G{PJ^y#3A-IsAnq}tAd;%6t0t}4$EYnA3VvBMmUxdN
z9Y1(w4J^;LU_}!4V66^rKY7!c#rY#54d$(4a`ADa_pK#BDR<3YQlRMMaL~ayG1|C2
zy6|Mz&|8#hvOj%{4ZK-Sgo^-2Uq539no^D0ww)CGHCt3u+Pj&_CZd;F!4QdpZW>gU
zpee?<(maE3iXDsAoRf&<;^4H{DKQ?3b0N*o$C>b@&Ld5SA}@?Ye}1`!1$OdCA<R*o
z3X&NuNfQ_Jn-^arj+pvKuovIw5IUBs+6FE)g{8=*9e9Nj8oP<)DOJ>{>l=KQ<?k|H
z^Tqu?(AAN-wHH}focyH*5l~?k*C!?B!xZ+ehQv~~xk)`6O~;GvDPHrev)MIP#kY~N
zIZ;Adc@knw&mZNvwM$}a7R>ZOCcWXk+3bAl;Bt%SY%e6Ca`?6;D%%*mb3E%HQki*@
zcz5+*jF*jaK<l9rCAeQCN1O5L7~QDtDKs5o)|++fpfOLLgS2gbpTd1r(c;;KK&iuv
zzw3`IZ@elL(}vyVe80UeO&u#_`ZLX+uX6wh(_;<pJ+o~6P~MkAi|~|k(9_DqNtMyC
zU=*mTI@8w9Ay6D#l`(dwrk<k@B9zP1EXpYpEcN%&GWV}0Yvf=Bk1p`UO_}|tt|Ht4
z$<6WoT#P<C2JIbjO$#8N!y>fQ@pL&ttBJ}4I+}UK&TiEGy2sGGUa{Z5N;O+VM067N
zpZzN3sWH}WtV~w6p72pF&}~9iFG>}hd(>x}l`DoXXklx_Uu)AYFSo54MOdOTTuX=|
zIU4vWL~@=ny^PtINwlLhgx9yxc^cJ%3obuXJf8No70o|yj<(*1Ku={#c`d~g&8v=3
zy@c;BA@06oH6OUA9F?l)<u>}(-#c9@yb_T)yi~9@oVxMg*CQAuWj+4)R~6>EaixMk
z2Q|bvo=5SiYGooNI=${o+T^{jZojYj2Qw2EiS5w$TJp7zL9r}sICz>?Y7x)`3Bg8a
zP|)pQ<sVx;^(zSR_ubEP&2ZSzu5|m}{u^L5ERMv8pPD+BTC8b0#R7aF90*&Qw(b?z
zD>sVq$*HrcV<tO=4W&iQu4sx;EQgK3ITKP~T&i#H`hBFZX$!ar%rvob@3cFG4l9HW
z>C$ns+s08(hd6aLVlJ=(g>uzytb45H?z6`ED(=)*?CPlUZZ^mOYS<L{`FdUAZU+_h
z=Jd`LSi_P!{{XFgxtW++i7Qw6w=C3~QJvQB9-De`<s;wS7hv-qUrWV=J552v_*u3}
zJ$=ee65ZuA6(kBrY6ClWklH>7CP#t7u(<Tm#)%BMp~=81S{I3#*4;Vg^Kx~i$SGd+
zi%qVEex|{z+;iY8y<Gh1uO3c@y<_uJ!dp2;UHSBfb))wM!T{rXRFYJQe^}?3{F6RM
zL1~_r^)rR+a!aYHlSNuDrM%LZkZv`|?<vFnsBjFr`%$bS&#1nt<#Iej<tLJE*qn=J
z2-jyZ@+wDpHvW~SUD$N}X8KFZpA;P60s+DFO8}zo=J6cs)NTrX9jYk>u3Y{L$(7~2
zRz5ANn>hDwR=C;`>u*$eRB~(^U13M&9+vuxZaCa#X<mOUbDHqHq1J`kMv#6(lg%>p
zP*8W21?iU>OnukQP00@*;DjZBe5Nx_?+ATt10$GvI4kj8nru~85jd`w6ip|U+bN4f
z^Q_x0+|1YSj|%6V1?wMc@GYcQEb2c?S7{>b;(Wu3D)dE_YsPCaR9gK$Q*Wi(x9{J)
zu2{78{o!-XW+pAt8kVfYT4G|P5y$&P)<VW*q>I*WsII$#p@L5EP}H&dyHuLaXCe!a
zOu!hn=OulDtB?@308Xl%trfsesob$YOMJ1?bR~1xypet;`}ddh(x-toadAgL@#f7J
zk!|f7Ecy`^8aUWvduIakGWL$1xg(faSeoTypqEeV>uFDSUNO4u{{X-G5!7{<MMa>Y
z8m!nH`(HWZq$MxsW!>G*$Q|thIuWrKxa4XKRE)PB4Phjg4_mqQx|BF`2Tr(mAfhWU
zvC23P<=I*cob>SavGH26T0k)>reQdaA>*>T<fZSit%*t_u#FpA^WG*aP?X~(xoq~I
zEYlJV5{Q7ocZ?bcvp(=Hxw#lav&b2)Zbmc4JuMtZiO^x@M1K5%xqZMg&!jx6^r5hi
zf3H*csn4ZdlmR#EfpE3?L(YMn30e^J%Y<jdO|xaIr=6SHY6MkTURB7Oe6o&s?n>eC
zg_8dO^<G125QJ|}kd{QfBugp8a>aU)ipw|K<ikh0%0+BIlSfU6h>{lc;v~I4io{mi
z9-VEM?KfAqNcvN|Q^{SZuSED>rR!QAsjRgyLlF|&HzZZuY}!o&K@J?{(OH-kVzHsg
z&S;pqreTf1j(ghC(mbjKddSV=H`v472glh#S1HLoCS0_ZxU-(`TxZg*BF`NLo~v*B
zykm>-KWg%a8y#ut@2A4UJvOqz6hqRUU>;41Y&}vzTgc5i5X~-XTzs>QC&{qe%V+DZ
zHOTe2UmziYG`*Vj?+%o&#l~>A()G8Lx!$P-M5?N<X}Mvnv6?oQ2j!Ugv!L!Vz^@I}
zFXSQ!C%u8l?@Ly;yw**rFK8aqKU{Zo%94PaMTBc*KD>L<JB{pvuS@t=%&*AsZ?3<9
zNlO=vaNo-OS!VUIY+FoBO!tHqRA(S4DpH(>K2~J4={GDg_}`^jp5IpKHfPJc+o2je
z{ZBz>wY$Xio1xk(+T8^7Bz;dzqGio3BlUFN1C*a0^(L-He!?Y5@Igb&y)N3qDH>XA
z=6beNaogZyiepZL{WatZh8Q(Z+9vxBbgfDoRz|K`J!x$)v7`-aK3VuVFY&gVlqv&7
z^FB4}A!1DtACGUwf5{(*e!I_pi?rc$XoTDNIM~9lfMK+^op81id?BIGG>Bgc`W0nR
z#b3$*hGPPIPamxbraJw=G3W*hR$Qe?Egey<*n%95z^c?UoiQHFYHK&328e1UNCSoU
z82r$;u3~{Ec(*we_-8qKGwkv{SUL7|Z=<9EACv9=R-W>_W`M8dAkeMzontxWoCNkN
z&4XJehg$uq$M&>1w<4o{7WY#qbpW~6Cy)(suvk!ai5ON*A==as#aqK%jo;JUXsozb
z4FoDhDatu7$MQ)#$GeZko_=Uk#DoausDNNVACFhK>-*Xxru9%xkz*Porum)w%q+cP
zFUoZ-`<9W>_S(Epk?q-yYEoyt`hRY<`?c#3ZC06?fL450;`>k5q_lR2xVG9BpEYkC
z0Q$?s{Y*j}vE_?eut@ET%fN2ZTgSPNqKCf=MW(mpnp|3$&8fEXbOMi`A8X}hH+tE>
zUAbXJ6asnRwwF8RTeIx5uGQlw(;jiDc(8Fw0qFW2$W+H^*wI+*`fA@9rzHh9(;1i3
z&_5kKz*JNS8FigdfiS92a;yzMPkB9Tw9S-7q_^|sw9_f>Cz{V}lwdPiOGrhfFH6M7
z&+l5-%6nsSb`+Y7wvq+~g|!}Izk%K3x?!!X38Ou1?rddD!MN6idcoh`*WE(0jD=0)
zwHaupD%Pa2nQ&jc)_M_$KHpP4D(7zBe@nIfB7TI;rg}};r2hanN$K{O{ar1gTf{`n
zOg4a8nw(em&c2nXTCD6q&Dtg=COYO`m?-_M{y0J>9d|=G<V@kZ<}2*p-cfmp14UVy
zG2v2J<~t_2j7hcRrGfi!TX=u|{{WId&tAW$Q}|c<bRN?{TenJ7l#w6g5=h(Zm6{@-
z``?zKk@IBF#ITJNgW3T|q{i6=LDYAO!8s+!oDRhAVLvT4t)_1l3H5>rFfUkL0kCvq
zXOlU3%{#J5A0p%ciHp2ZLHQ1^i#h{IgA?;DBb0?@m2;D^1BIIfV0NiIrXnNLExSk>
z%e}tzeK~KFa{8P<!AciT8!>F$@WAMbbXZg0?(A5*hLwS7szCriDhzar(`RLinsc)&
zH)9)%ER@vDb}`6dhO=whA|K>K7kbiqbCI!Wv<`fFD<mzZ*R;&Zt6$!FV@N}f=IPzq
zL{Dq@^)IsBtw7TEoX#7gq1?od)W_pVf(ccUliWDyKy5|>HfNe@a_$emDyIF3mzB?W
z+u3El(xC$;rwiV<`c0t#!Qu}oX(T!tkCAey4t?|1Y6{K<K8GRK4th1E*;~<Irg6^i
zArR~jNVoyA??9$Y&O7>^o%4HqkVVMx&$fnc#v^2DJbJxc<?8JBKdih8nN3dqc;XcF
z=hg&O%dT%EHS0P)xp5Fy(3l-={PWaz`Dg;MQC(%Qc&97Uy)T`R?dLy+^44?wIT9c>
z^*Fw^SGZIyBv@O79p*_Ej*!_IYhKgR`W>dWi_CP7D$xgM_n?(mm@9tJaax@ZYaG41
zFgTql$#HvE%vPP8dil?3?^bi|NWbsUV$o>t9WKX=$3Z+t_3DTHzWM_;uSsakc*M-~
zo`lbC*6P+-!N|=@%s?GdKY~jfD`|wck>BdvgNk8tAVBm}p(kh1_lGvVMv%>2ju*-@
zJf+-*X-SFe>;9i^tNuvocP<$1`^EQ~@tP0otbH1%sH<g(y-xoC8zOSwWl43Jm9Itz
z<pzSR^vM?Si~I)W-KvqRE;J+*xW-DD=`1Q|Q&V`wrge>W=A4g_SHK2zdTd`)QOZ`=
zXnJAPX8utOUVcr;S1D*D4T!Mo9yQblYJT0P((Ws(tGFje+({0rq`hc5#8GAKB(nzl
zBLyzGuBz9Xr~n88poK`SH63WB{J%f!`FU#QgTPVV&FTm-HKfI@qpVx`MBD7dwdd}7
zn$|n_=*Fc#dFky~ub*puv#vt-j{WBwjcDt!Snc2}elns0AH@J~I^36%V{;nLn=)$;
znDHX4Ju2%bN<HfL4OhGb>^E+A>IJ!Ql}uT15sQX$<1Oxw3CSNB%~xM_4CdVUf(N9$
zD=meD+HO8XF>#hh<13i3SLb|b-UrJ7&UNl3_{Q#MJ-`cez14p`DkQA|S()qCj68y7
zt*`HdS{|NyjQ;=;DMfKvoc%vvG)WT~xPT8@TfFO=+t|I^cDTNZb0=c5+$@DM{RzNd
zwX}5FYI3-z55xOMC0bmXV~?uVXQJp9{WKAp)+Aa+P5%J!kG}wY<bZu{8seg>O5Udw
zXuOr8r>&wD-yQpYsO}9hS|jzubw_8kOkc0e=03cqv2^^q#M`DA2|uKCYSObky7?Xx
zJq6m&Xo-&CX0!cbdZQf$uG9PUri9jG`ofwqJ-g3KJ3rFjOemYw{v|(AE2xC`q{{(U
za0ZUwy@YWZvtiyQIZvkCZ;(>=mFlZ}n~Umk%^N20{{YJ$<&VOhNBJUu7-d_i5f+4t
zfY`)e!`m?#U_ly#2~)UPP;I*vtpan{YvtrkFQ;#q<-$UqyBvmn!l<J>gL*HkH>k^>
z!k%oo!BT@bvu>W*a?5#|J)cQT)80FsyHH-`M;49?!Cd6_p_!zO1kz7AK&+@}5Jf%P
z#qIkrW9k~}D|w>pt|h}k29ZiITmJyEDeZ9$R6{?tE1|hIrK&H}Lo;dmj*NcuKYix+
z>4xHwJ!t6v06%%@=VZ5^8%?JRkE=zmr>M}^Q#X<D;O7AL)K-Ag^>dE`Z3=~!t;=~a
zc_x_Ly0iyL=4fbJ{USy@=Y?f9L=ANd;Jz+M(^alIqSRSs*o6fL?<DnOj9VXSG=MJ3
z`fJS6<~Vl6*X&2#)5^*WORs@?daKVkR?Y$Q7QLNojPgBxJEd3i58zgPO7$0Xp1?F%
z>p#-&d$dV0^X@6e^Z`mmZL79h&Tpo?4=2Xd$O$i26kd=p4z#883qQ*d9a)0k_q5Mi
z8rj+Oo4W7;T`yI5%F{Ijow?HWYh3YaqL7x29!0;S-W$_m^-(q$w~F8)ZN{^?o>4u;
zn4*Is*qR~meg=_w2LyR8#RVcqCDKY}x230{Zk9iPsg0}Jdr3Z{T4p}xd&Z2+Piu8{
zyZyzdsblVA%6b{5B4Q?b6IZY8Y3vs*Ht#m*PE2<1Gte83@ewo9?ph)z%cOMTCL+_)
zZqnW}=hbZ%h?t(4%}I-S+%Xr7s}AvTF)=mr@rb`^o=e8_c@}NbczxrRaLtY~*Mnm7
z1jk*v?f(Emy+nVTze6Ne^_xd{bfaaG7(@2yT`lbJ3YF2nwyV5{RIm!ade`$T%&CCp
z1{-OOO0FSZtjV0i(jqL?gId;!FA}RUrv#->t#^#!HmO?p2SrzbHJf&?7vT%?D+K0R
zX_yd!U{FCF1}W}Y?>|*L2Gb;{ou-R`0$el@s}-Xyg<(y}c&rzAb?*TmmCpGMK1C;&
zM>Nlr{{0l+U0jhLbJ5z4(-ScrI_>`Eu@NsZ=QH)**clMp6}d^^E<vz;*JvdKSy4_K
z$lC2Ng@sf-Grab*x>b&m;hbq1t)U1t>oHnIDG^%p?mK4Ijb%sN{+RlRz75EW<)6#7
zy<Xu7(qs<Z%kxiE3(0d&n@o`bWNOvTTB}o7+1{D+&2m9MCp|jK^bEI%zP9CS)>ow5
z2QDIKKjmBzn1J9(t{~F-Q}-35b#{$^-t!$Wz?U4Alh9Ps^(%*=-aj&iFQe;4{{U2H
zW5-&4pmN<l^(K{rOZk%iWWBF^?kl~a+CiLO1idtC>dw46L}c)si+>!VF<ItH3O%$E
zwV|F*xWsm;sv41tT%FFvu1roxvxvCvwA`yiajroT6H4YgxxySy_lpA2(el|1rYl*V
zrso{~uJP4dynkMy$?yC1R$_mCp_<QCawGSc>WxQl>Cm3Hf4g)S{{U2XpSAQO`}DSq
zO}_ibN@~q}cDK?yQQALTbi3j#N8f3S#Qns?{w*e}i;-r4GY6IWE#7X=9xO*%8M+yb
zU00MU=KlaReiiCJ4&UUD!DUX#U|}7veC{DJST>R7DZi?zuPJA*K&hRUJalcZqANw(
z8%-%)Q(7(7ZiOk~OPZoAtRqBT*&~^uAU7r3C2c;N`gGQnqf0`?7HGyGih~_1LEE*W
ze5bW-a_ZVby{3tTA^@r(QY%e8g|q4R`pZ={A0?f3WK?2DNtma8*1fyT%=YMnnf>RY
zU%&V1rec(t>6Ydv>Sw!bT5CUj0-pKnS%{vpbAqmH1fs0Xd<PweTGAr@`ioCd(M}cV
zH!&zWHP5h<p5T%@e9k$&u;J~Qj$2bd(XFG+ZK0sDvC8=CoO4*n9(?1`E?k->E*m2i
zE>}q%`*!N>n%`4BP3=AAder88TPkL*Yp)m5^`9ht>z$a(6Q}CGEqA>^a3x0Eb@EAE
zXv|$K$KJP!X`J$xr(BVq(oqR&*MQ+>#YwBFHt1Z7h~vkOc7M5c`Toh~VO7GsHKD5i
z0Mkz}UZTQ_)MBmgYA$j`>L?77%Ef~&Ugx?vs-<lb$QhdsR|vt}J?n3e7K&DD5ejc<
z<_KaRf!7YF65oMI34F8c@K@K5DG!+1<7KCQ!nI_%4N@oc&ub{fWBDhksUm-A>MTg=
zq$Gab`WqyV={*ld)t|WN8j&;Gze~RpAEwhCD*O^+KIY44)*`c8{U@tx`1iL;Ykzx8
z^c@=BKY8k`Qr$$v{lxwn_?cTO%GxOjfpSkoiCMX@ob!!5eJrMBZ3N7@XZ(@)SN@J}
zyZQCJDoRpa<fm&Cl(bfiajWsLc*(rwu5e;pE7ooFmW9?Gz)}0lQrNfbSs@|--enE?
z*QE!;JvLRci%IY`MQagC#cL4}a#EDF?`W-JhSs0_gq0{U4k=2-XwH*vUd!f3K+Qut
zxzBkq^|h|V`1yF&=Z^jR^i%Xh&qZpn`^SEoYQ4X=OqwIhyvIegtuxmhQdoI<%*T70
zrL>Z@?N>H46YugI4J6$298)kLux_u<&Rf=sWp}?H;rz#5l|I9<m=DM}PAq$dOiUTh
zWF^OGS1Eeb1a0{Dv|}w;u|^Tim22d6&$!UJKN^xNSi4J>)wE4*HJsmB>b@vrPdLoI
zrRx_WXS^h$s#i;q@9Iqa-BwE!r+dXIS(|5Yo=X1!X&!uviTYJ&ubcXjSonUMV*d6M
zMn9<Z9bkFcQ51Waau;H2X8npum-l<vzC<Nh6q+odDPm2A7AE)dryt_Qe+~W0wR&I7
z;j!5m?Pzkjl*qBbWc{4wITLwM0EqIINQs%R?UZL6`3AL)#GBe~Fo=EoT6G&8E^EX^
zrCQK*kkh*C=5O*Gi@-7*GS)+!W@<zSS0*TW=W!?P?X9j6nEVNtuX-;et6VkOPj84$
z^TZzS{{U)Eslr~EkM#EH+%@Wc>&*1W6gThfc*B@&f`4i1re%9}v`<Ou#lEI`2B(i}
zM9lOJIPsgs=CH1;jyu}X(pqt8kGbv*IF8XX()tyi->a%O6Z_9qJ!h!2Pxb3ZFFQ?Z
zEc$|AJd4pJP3CMjBp2M{JD4W+^pGGr?LBttKMMZ<(CySuZmv%Ci2j-tp(r0~v{n5J
zu)09E-$_n?@qTTM6~OfGm2O1{1SBBhK9l2Nm~J>voaavJDy&Re@i$#2UYeQs@exl!
zN8jCu60;rKzlfaE8smxvBDHf!rJ4Ox(HQ!ktjFB_^h5su@1r#_S?Q-{vHQnIV%GYJ
z>L7(D)OYDDLL0Yu>mQA_v8X`I#kIJ<H&WIGlh7i`a9&*H;sJ!`Se}V%8f$%Lf~_)m
z-wxtc^8l&xH2F&hnW$&m8;9>nzm(5T=zCB*#P^!=0$!HzBu_xm(1DekG2kQmrO0R~
zTRs4=kmDK~iE3#nGFDc@-gm$t#&*`s^s{M>(&@sjf56-qBC%~ZZF&Cy7jW#V%`$T4
z((kA{h3^Yc3f1jRO$q-1Sn<u*gx0_9USVAOI*rVksb&Tohu0maM#>-Z(mS5ZK(Dr_
zYTm1LSdI50%hf(01i2bRtpm&%&jzx~<|Mc{rk@^Vl^d#KNv(QCwB9|Ipe{6pQ7Agk
z=;i9v`QSZk;B5Wcnw71mx!TjE!fR2QP&!V0zj0v;$V%v6!WMEqKqj6_&BZYKc7V3O
zdd-`q8?}M#ma(FubZ8yViK59wzcA$2tin8@>X!bYbDCP!zS|LL^#_^T_uXfp`j5>6
zJ^uhXCHh0vrv9m|j;mBtM}=}Y_S1Xfv%A9#3)+MQ`@N3B)|s#DC$2u#Cw`UCr;J5!
zGt$~L_dUwqX)3!NqGn>Sww0&1>gjzc?ccvZ)Q_*%(DWi>_vmfJ{?pYM>Iqr@0M|!c
z42I!2s8Mn+N4V~UT)DQkdHD~gT%QZd=1xox8SA%I>Obhr^%j`^v(*MdUbLkxYj8hI
zki}FE>4JyS?H|8Py0W$MCH~mlZNf+r1-s?qRcV8>Xd&myeyi2sAd6n}9p2QNO!&-n
z+jg|idrZlg`ksiy_x<`SRjheT^nDsvyhWp?H0?iiw{D8m+GDlmdaO<UzWZk@U(?^W
zWgv8l%tzXK77eR05j|6uv^eb*A6MosPxKUY=O=K{F)UAG>35m6tvxrmF^*zCc6k`>
zUl_kjE2E-nNJc_jPiC(c4Kl#Xj`6;6$gNM36_Q&g(#)`SE~A$`7nAVJ079x<U9>$_
zyu{Tk&a`=NBGB@JzDm=*drj?bye&f9WRD9ZiJWGYv3vw(t4WaNs1V(E+)gaZ^b<>L
z)ld@bD-;({y&w0DLDC#G7@#BqXwVF6;*a01ii9<}oMxQaXt4Fv>5Gk9uo^P3t*(w8
z-lLb?suks0cxx(JxtcZ@&gNRmESL>Snun(*<VuLOSScf;gwAabMilI+R`$zrTG2ga
z^BowVl>$_;P8FPKqI|d`2yxoUvxo-_GU|Ld(K5{17Hz7Qg%r9urOg(JsmVPRx-${;
zsTY<+dWtV;s{r=<{f^#UPvge@K-b8vRb%~f6jK9}sdlkR7QWXRky`!Z#!3bhzxC{^
zw71o}cN^vxjjB$Nej~JZi0NnPG#}s4UzwQknYT;nQev~-djaY16X(!g?;pQHZ@)uk
zKfhHd?fdoPAJeVxPPne*+=og6dwLQ+^W(p6)sOl;`tQ{#d)~CAZEJdG>4|fS9i5?e
zW_o0$?KKT1){Z`AOXk_<vZ<`7;(-)aJH&L(kj3A}w9C4dyxX}VWv3^+_rFZLAAP1L
zrnPHd>EEO37r*JWL>1!C{&U*wU&?=7x|{x~pQ-AzS?v?wu<ak;rP}R13GUU2^6Hw^
zuWz{Ob-cd4*oijnYaRRd=-iHxJ)+)SUty-AC?VQpc$(TKk^a8<yg7B)tr)Gyb0C7N
zciCtlUi|lrW`+TprHc>xnYv!}SPLx<>S^fDo30q$P<EQqVzbzb-k+}1+P{{tLB%Gv
zh5#VA5)z|{z138xD^GTB7^VOnXa}c<R3)lM;C1u64ZLNx8fq`)uEocgpl^RGDB~do
z#Jw+Lg@8CYas&6A{jfAycF9qYYGW6c<7Vhk76FF#l;h|dTQF8GZUa1)e=^abR<|eQ
z_iN{66Dop^G$q;OIV&2Gacye%3hyx#xiZ5>Mx8F5#-JDi#42wB3>J`Hz+m}~*3`lb
zpD`ba+6wN>*6e^?<RK~#K0lv(E*BQk<Kz&F;8esQv3b5(q(<?tyK&7WQ&5bkZuOZ7
zJW^-&imYP<p(N0>n75BpAA(Odi$Y~a2ovG+{C(ij9zj|v-yq^9TGJM-uSfAty{$1>
z=uMDu;c1?hcC!-`Zj*Afv|3~6S~c;DcAHsE3KD1acj}Kte0=Q@P`@4GC%kkg`%m|g
zJ^i{9fBWc7&sA!(`}Oh%{{TL#*MIZR?f7w?9l6O__Rw4Sd^^*ePBU5_EAn5Ni0k>j
zx~(E3>#4PC9p-vF!yHeK-%e`G#K)9$-i5yV+q5$M2mAi+Y4)`A-lX5l@92(9{adS^
zI=dbEv1Wey^O@=|*S#^+Ie6;21gv#BCYb%_sA00t>GGbI$$6XCy?(QJD_5i(^%y|`
z;`zQaazX6(Gg^`DhJ+}Y<{L#EiDC^Pm6G26XEpD5B+b7~W_m<Ia`#w;_D;P6{BLz=
ztVrQ#g^O;(wdvZ`B-WDVmT^SM*)0OExH~0%TN<EoOQ$QDy4SiE6H$9xwMyk0&1S+m
zEpV1gncL3H%LkLjmFw6sN($jl>ZGGYPMn+lGPl;ChezBHh^+{*d{V^Z?c~my+J$cA
z<2<eHJk3(LV0kUhPjlU-Y)cqHmY6n^wIMBC9K}#biz{krA)=GzyLoM@JLv8YA}-S|
zgwI|L7K@TC-=qtHT+q<Rr+o$jcJFah#B(v)W4Bi!3E}2TS|{#09-NR>1LOC^MaUq@
z1!}gXhC9cQFEh}aAnENAl^~^2nzLoCGc(>kr>XpSuRnJfP=mska}Se|vW2uU%|;j2
z#E6?sVj|b6L20e4&>ZofzWs#Pc!{L+2jk1ko$EAv$}CB|L?-0LBgWON0nfOJwW%R)
z-QvBz!tZ$cndmL{{pY_zYySX!e7pYuPOJX_KntCN3?LQAP9x~;@9nq9Z8U_|RW-!A
zz@S4V?bMcMs+yGj=b}Fm`*hBi@A|&j)Sth&>8&`A>)u+_p56QO-k+3P@9DSZW4zm=
zIo^J!y!jg4LhM>Q_|H-TSNDnPYcbc4UN-ysp1qP=`gKH&dHtuM<C5QVGt!)3#<gOC
zn{^y_D<Udgm&CVB^TboHwTqWZ^`pqPG;ik9guSbIxgtBwu47GN{{W-)Ld6_Zua>|V
z2lC$)6<VW`@ll?h<h*|Eu5_C!$Nq4zSI0)z?fH_lS;XmDf3-kdl_0HZ)tZ16EWs-@
z2}Np)z`tEBcLQ@cAXt>AaF{<3vE^}s;)o4=MP<uH)MD3)(ZCYpyDE>{DjdlR3bJ!q
zWAZLcyUJArhFD)COi7mFVxHn`Aww3Zkkz&6mU9rxg3=~ztw<kal=hlON~Q%OrZ7**
z{AX9R%_P&~{bD*1*QIB;Jf~Y*^AfFSUZJmkyU$VnP%vf7QUsGrd8FU(6<F*D;lGLL
z+S4-=-Y2PMruscRq>I|Mi`LO<PveQZsfO)bL5UeMH844iI|3?}ry=7+rSDsY(Jp5l
zTTIO-u$a9jJZ;)Q^=Gt9_{!~CpLCv-dMC!Tv{#_HdHoX>uR?b8pBl_e3CXqmD>K|q
zOnpTCF4uVL<y-qlRq8tJ{!Y`^72q3uifUTd<0r;Ah8G(TWP|2^Ds^MTe=PN5ef`f@
zW+VFaeG13zJs(D9KbxjBe!lI|^*{dlb6PwiV*NLz-@ke3mttbm->CQ4v{t?6q_Hn*
z#jQ^ApByneL;~HTik`Ke;j}|MXw{F>Deg=rY5RuV3k8|H#149|A3uM(c9nQ*rS0Mi
zOj`ppHYRj*lwYIrt|Olj3I&%)_c+>SEk&#}LvzI1*0Cnmlh5>yq_Z(S=cu&S(Q4Xa
zZL53Fxgi(4eCysDJkfHW7}C4Ja`c%M83khJu8_VdG&7v!s-22?CJPR9&1{&x34K9)
zL$<n<fmD{ghcvgia$H5M62GgU9@7vT{;R~A2N1DsLN0MwH(b5w8n-kX17uzLB}!<u
zXSK`%9taaINU`+O4XN{!tit)oF4SI5dkd<-B_sLPee7nIX>ZEizl1j7t!pgxEheWR
z)q%wgD>yrB=vplUwF6(j!?)que;A+h39?q6-Q&!69cDa(e*H|(_3DJZC%jKnA|!vp
zX0soN?{VI@rL9}>&rns;p!2yUqA$0_A!_%5)PmB&np$R&)WHWcTg1mgYV_^eewT8y
z^%ETh%Tgjd=4vMGKVAFu7rQ{_*Yl`arKuA_RFEd^Ue%fJ*XB3>0F@`I{xdNhMD>}M
zp{mtYMQfP6Ytszu{{U@`j?J-CL`7mEB0f*_`s!MU{;|;-@&2*V9s2$HVcGtc=<dg9
znZHau5f=U=^!AU9dwKSjU7ytxJ^FFWM|hh@V>xSmMD(tC*uUS`SojycsTHSM8(e>l
zT0&aOO}pw>Avfq&z)W+@xlG&7^On1V)IL%!(RW5@uc^CV)l?^|dYiLo`a?US`j5)5
z^d<lfoaDRi_l9*_BzaGM{dsjgM^kRQ$6jCh>L;(xwP=Nqt7L_#q<SR^)5f*2e5bs`
zckj^2ao)GBrYGjA79z?FzRf+cMMEW@iFq{Kq>)51K0T}Y=h}}m*6}gff`1Y$dc;h}
zpK3*aRhJ}0FBLb1NoeeQTysdF3Nn<or3pGI!lbRkc_Q|=e$(Hno~?L%b%IZ3YZD#f
zW3=}B>VM1LKOX&ekL~z&pYll}e|YQae-8b3>N=SGIIlT-7Al)DEoQlsowSW~GEGAV
zM+$Ef-m@JriPyEKw|J%F`}o*QUXvev1<KF<eGTf`V3+qhfuE1yPdJDZWT7hrymc)a
zKBAG@Kbx!m{YULRNAJ~o^mF;Q`ls_xQ~UKl?Q~z}>5t`}jr(7wznon;{>}O~{rcSp
z_J6DY0I;`A{`~{_h1O^DM_hOQ>|Hbe0C0Y-{?&S~@6>f2Pwzj4dj7qCNb29bbw7=|
zkK3r~-A7Z^e{QS%y<h(TsV6}H0PZpR5B-Z>C;tF-lhS|vjP$qrDRn>gI-OJh0I(-W
zf4Pg){{Zz3b^W>*_2_@@bl?5l^iTJCC-cu%{+&l(`E@-<@74bRpQ-)&r|s3hr&IgK
zU)Qhe_*eJ*E!8@nzo%B}-@jG;<D&KHFZ1km%RldJ*6;n#O@FvfzrR%eVRTRD4_W^J
z{j=R=f7{ope<gbV!~jkZ00IF51p)&D2?YfO1qcHH0RjU65d;z;F+meiB4Kd_GC~j(
zBT{04k)g35GedI0Brt-K(G@^bW3o_lqO-yVG(>}w!_x63RN?Ud+5iXv0RRm@0RI57
zdnhFSRme05rXT<Yq?)+|0vg0_4Y{k;zDOm=@Dpd%a{?=?kU~Kx$g$uW%v2%*#F5wv
z`)F3AOzMb0vUg(JUWA=DSND<kvA4_IDgOYs4uDbE+fR{w<_bt2rnS_!BaJUs*5>-s
zk}fqGQvg|bSL6zeUP&87QRZtX`bi^XOx%ui^P-`YgLP#)6(ey&dkV@<X+?k_Us{3#
zE>m!)#1`#sa;@%a3<$*xMjkMMY`|oEnh?P0S|3n#2BnBODlS=x=gDaq)g|t!u{59`
z%u={?J%~3I)M*T8#fwPGmiqguJ5#Z+@?9@jQi3?nqcd}AU}X}*KqN=vWMV59nL@(3
z5XZJvqmo$)Mn$`3>_s_HuhC+9U}~W8bG<v}l&Q>}g^fH>D3T-+G*1<*GM`Gs;$d<K
zzeyuoXOk|)sR3+Uq!AoT!Sy@}8XQE3B$<zpHwZk16$Z&GkcaBBn|>mOy+u+~1F<)x
zJB^4t5kPQ1?Tv-agC4-0FG)91OA9sQ)#G8qW&CO=dX9tRk=?p+{r3daash~!HuFBc
zG#uNS8J{6O6i_oWvX3D{X(mOQck^ubRrD2oj3EuZV=G)Nt<}Sy@%za_>@@{s8-k>0
zY9vN=9~7>knVZt~74}q`!>OML7!XJv{B-u}!sg~P%00O3X>k^cK%^_D)xX&kk;>(q
zT{1?5uwlp}OH-Whhkz_a%Kc%fH5O+Qf#O)m(j)iLKJORrV^%gx_(wZYisRG}Ys<Ja
z*$?8Pm%=+#_D3OZ6{+JfndQ+TjkG?dqF{+B9ws$AhkeD*!Y(+Xg}OH&WgH7=Ddj}O
zWg0rLy15@(yeKk@5W5T7*EJHK_JGCRU5^fmG-JRNSiT-GneiC5*v!C?0`M<MC@mAt
ztt+TI<O(cL6(k)iO&C!d4~TP`u@HfGHjx`HOX;B%4jDv_c*#=!_1G^^i&%nq6(R?V
z4zJQ&r)HJ-2Za^4NG4<cV%MmUytquo)#DqyB=+TK>RGk|qt-x|S5GpgmOD8g5eIr@
zWW0c75-`(x>8WuYvWMo@{fxIK{>3a*HMAsgSa`$Adn+(n!id^mAtPiIKVY@2(-_$O
z$3iH#k2Il%RpT(RwLyqg4HIM_F+MZg(TFOlN|;~))T<X6&z`!}(WC-W2~`qEGaLE}
zMk=xm19{c_O&V$bW2FOj8AG+bR+y0ZSNGyPvJ<sQmPC;6A`R5}jg2b-0+q;ta*e?3
zXfvh~2q9AP<<W`0$}ei3b%Pm)l|mSrU9L42q{TGQN!&03)iec?McAnpaYT~7l;CS`
zDhx%rxU8tI2>7i;Sl3oTQ7K|a*ji(I+iHPGjy^ot_hviMxVR)5xMsT+umgZ;SQyoa
z7avrSpgn=22*?zIFTKqf%Sj@S0d-vwPS#K^O&2dPjeH@t06E+WNi)rfi&*YOx@vh*
zLk9w3M5s_SQLU~jIiiuFmhE{^4;u}_iW8OUojQ^dTsRt#SPw-Ms6k|N)={%K+eIhD
zw9Flb;lMXr`EzPxY2}nyGH{WBtCpjPn6x}GhgDJc3dG_BZGbVSO+kFQ6OhYLdsIT1
zwJeS-LGNqUB6(6Wca0(?ygp}YX9PMc0Ff23Mm>)Mio>EA9ds<#utf7?SZMRTh1NLl
zU;yNr!lzXv>X#Bn=dd3j7bMgpGuxjkRRoLN5;Xg&5qYr=JS*8pc03RJ4AeN`AUxfh
zA*c3fZ(Ox6v$^bzU+m_!{;)ZR=}vb$0l6lC@j1~`olk!uN8{0l`G%`lmFh<#rfChd
zDe5W|EhclGMCC)b*E^6s(WOJw4c1~pq7aNtwy_}GRAVM549}WSIAXgx+h!Grb<VmH
z?oIRpvX{u;yFfSmIVP1$2ht=&UQ}4MI^9&bE?2#nQUIe6z6TCYgUj!@G{L6AVk3_}
zXBri?#jnjX$hn>D5P|^6yq-;aHxVciNI+SX$(%A4us&kFqawOtVqn>NN2pn?du?IK
zsT{?LPpHFHbnI!A&FuNOEJeT`PAM2~z%-3uM+8?>Gn1|FR|nlRZK=|OvD|Y~-uBmX
zR^?53f-2^rRm@a)<ZoW}utggE{mm5xa0?*;M+S4p^3+{4Tr6G)^1a6!+SJHg6tfV#
z9DtUnu;?YkF6`NL48Iwy3r5k+(&j2LqMRI~AS|4a+t8fk33Wpo3)<(3ML#-uJ_x11
zK8DLpDIw5(M9dJaJYqOwPYc@p%|y|(fG>$17a@}_<ro2aVq51cCB@Iwj^qcZGaMW;
zcxA-Q!ol*LLJjU{xseM3LbdL1YA~^qSk7Y0&4pk}wkAbTVHk-;`fhgw4FRd6$tpxH
z*0^9tm?GkyE|HfM=^J#x&6FY%Y1n`xxC8vcoqz=m&zaN>Ddf9pP%vypB>w==o!X$%
z7)I^(-@7004#bWB0Nws^D9znuI(}<ennSJBvdL;#<xt*6I_QNYa)n7EvZ{|lrk4q1
z^1EwN;p9jOKO5Akmm@EX5=gKkds>Du%tw$i3z|m;MpZi9vl8vyt+}gW<uIwXbYYmF
zso@e>pBh*T8p6f{NyEGRWOoWEWO*0ADu>BI{7Im>F;YlLj5pOlH7CeYAy`&OnkR4#
z?H$PsM+$6eDABCC1{w0OBB6<;Mmn|QCsXR6ijfCdR^@MQa_>s()>5Te1@*WzxPr<!
zC~hkn9yxFDNpQ%+$W{jxl`ZvH+z+{hN}<cha)4Z1s2)a|*KggSBlEAaqW=Jiuja2>
zX9$*3?(B84fm|$DU`eQKgAPDRv+`xE8lx=5Kr$og;`0^3_tKK=3`a0yPT6qauZ3Id
z0oge7sMy&FB+V}DPm=RR4^g9x#-N>mQ&_0P5XQQ79XuKRDfULz2#;Vksik=OT`S}<
z&_cr#hFdgXa%yzX?EGGBT}Hh!dx}h$c3BmiNU`$3a1CJ@<U%Aj2bow}oLwR?y0oVD
z@Rzk=;z>QHAaN|vje^Eo^E6WG&4*WL*l^56*<0}x5IpnB+2wLH@ZUu(N`$P&Qs(`b
z8iGEmmSECNI*Y1g8zLVQ8pWUmvy}n!htAb-6=PEz1Ibic{#4clVIWz%1K3s_4^lY@
zEV2`n07nL{d{(lOJ<<mQ%A!ozna{wh`jfD%HP;P?TW64_?$s2orc<B_4&>IEr#dQk
z%fR(Cs!51W3+eJq7^1j2>^Y<EtU%eV_LxyRC>N$SRdxZ}(RcYj;y-~u7PWFA8B_0f
zuF4GW__dT$t*;{jZTD^d>P>(YMZk3{aYGTS0iZ>8u{DwZ0P|?9zxi}xU(u*^ze7<L
z66ydWkT1EW*CAkzzE(85DR9nwl~$la17sw9W(>ncXRf1IO(;`4u7GQOdlRK=(Uu?s
z9HVr}V89cos9P&Kl0p1v$^rB#UpSgF@}9(isyo_~Eb9^7$neO%WD!Kg8Y&EhpUG%r
zT(iWv)M%uS^Io3_*YiurYAC^FkHe<gD)UIKnkno_TX=$z$Q)Exd?qDEk}GOasaTeh
zQ(?%p8wSPByPh(k{Y`6f<hI?oA9w8gJaus?!D2eB4ITPusekf;SdtDV8G`|zmqN8Y
zjv{+l9J?xx6jkVOr$hI1SxT-c1=C(xXk5o4_>uEgCd!hlH_=JJA$T?He`h3cCmE!y
zWWY?a>bakG9f+*vS5p$o5#;`3Sjj@-%qeEE9ulYF4b6KdWyIlIl*{6^V$5a<683Vy
zGb?eRtb7PoRIw=Wn}bjzj3h9jvda1yW@1QCDRA;d?L12y(WG+RF>}ivD2J9zOMqo|
z7Enp3%EaoR-^O$U%#m?i6#y}*<N91<lOsx<mAG1URb)cJ^Ydmb7L{gRjDqt+J+h+s
ze9b}z7(t@_FS;LHz)^eDlQtqr2?VwDRjgbErF(dREu~>_Z7Yb{`G^FWAGsxKrIAv=
z7ikF~d6W4HmBYMn>T?}PKD<`r0}0Bb&Ss_6V}uN&?;Dzv#TFRc#}Ed=rOFKfqKI69
z*+3vx2@T~w7}GZA%=QAD<rt?-^SM7!c1m(TvP1OvrYDBsDZRll`PM!C5CfK*+?O1{
z%>HVGu@$g+t{3iF?4rs)-1{gb*PAG>v1k1aBLV{gtOz$68iwUXxoypL5k<|mn9)aK
z>PRbdp2bZAC;n9k)AVY|AN8z1QbUTI6Vq2Zn+*x6CkYXefg~L@I&($(V<d)Sb<l;U
zjS0cV3xw{@<4o42g%_v*W=|E-P+L){y-n>Xn+xHw$Ofc&9c|@M!06vbQSW@(=qhwm
zW;%ym#bN+So0#TNVpq0tt?R91T=^Yb4PG`q`x?6id7O9(9}oZ&sHvRlrpn}d*S`aD
zYGn{%!)Qvd3JL!J2)%L}#D<lDL`BM={{UOjEYM*FnN_v3o&^KoiF8CAlvcv50X_2R
z@?qjG$CKGdnK}yi8RU1a(87ySmoj2*3$}gldhIkoAI3XU;WNP=h?i61CElWJvUFru
z$WMEGpRIS|oA;P`1><0QeN#)Uus`o&{$A@?fg7M@z48J!q+ml9RUd+ip3YWAD9TRz
z)^%r-bR8jJqM9)P`))<A__YiSaY=`_g=GjVZ^2sE=NM_?yg9f4Fx>f53(U%$II!ps
zm%TvdmD}Hyxpp-i5v{<u7rCiaM<^RxU`;bTiHg;xY=gaZ<XoU-Qp0ES4aEt6vAcVZ
zBx5rGUqGP0NBq@|oJJvOR0E+UvV*WT0Ge3M-axu9Cg+Mcsm29(nM{^l_zEgKJSlK)
z3Coz#_Es+E@we+(%sadY`(dEwMjg##r#%e|Iw;VeQcV-|$dU-5Mn4P4b!PGv#PChl
zRr7RiC^TgwLv_Rk*~i(itob5HZXR>U*Wq4Tu;So*u||ubmP&+M9qqaN8Xtl_P#zV0
zO;HlKpKjvCrI7NFF9*qWt#kWR7{Ml+%}MtK4|w2UGB^0ApFu+6@=j+X@7js5J<t1_
zU6?5g_mf?kXFs5>4_Zk705YPVMU|L6zmjy-O*ye8ZzK=(B^3<QVpXl75h0OR)U^()
zpI(jcQs*%yRwb_;xTi$vjHKovO-_-Bf}=gizMdMM*TBT(P#?E#?ad$-ng$@D@1Zq`
zRzEu;%^XX*`kU0Tgefs3HI2g?RE$ixdt0Q|y~6N-nuV<pad_F3az??0V^su^D7vBn
zVI9pt<}~SxXI=H~MIQ^m`#mwa!{R|wr@FWVRI)R&ES*ny+~|POU0PBBYipHIapg&I
z9DA_7?8CXD`Yo<K1rhX*?=Bc0)v1YQcGa1W>p=U!Sxx!3%DpF-CgvdHJr)nqGBJ-g
z2Prnc?R?Q8Ey0kuZ<FhMhjB@&x8-6v29Oq#0CbRYQnMC#hK`4kZq!wo_}thEmr0Dk
zh{E^v99q4U!fagExSCbj0p_tWyttTR8Jx&889$n)Q}Zz)AyH4(2WA}8_~)1*`d1t-
z)=|Y}uuwoHw(;7Xvp5>t!ZluOD6wBs1wibERgkF>pQr|akxv6WF6Q@WS3GPzR;BjY
z6DZN1C9|@FPXs~G1xUehW-+a<#8h*{q&u9VNh|=hDULio9#sq?8E&W1My*(9Stgb^
zK7<l2X9_I3QmTnDv0N%bMsmZ{RMJC&!n^1a1l;}tu<^TvabkoiY__@Do;%$}w=J!x
zn;gSXX>mOSK2mBc4Fg81*2<BV%8H(#U8~xx*qlKdx@YOao|Wu4S>{O1jIM*mf0^4$
z)GlE5PqLH21=CVn>?b_2sbdd^z#jw{XwSN2Rs52+Ts%NW7#)HoI9G}$HU&Ph<kiBe
z4geH4bFik-FR(nDb`($hh4f2i&E!C??w3EAYWT9iq+8D=h^AB3_FSi_1nbC4)+gvO
zxMFY6cH7lY2BUoGoNBI%b&(HyQ(}>t9J!K6@?~VVolKdYEMZtgPuXs6MRrNAQOHh4
z79qgWo>x|3xk$zAJ6`uR^TenOh~yjJGj41}9D2tTu5D$`MsG_{>Sbu8Qr1<?e56vW
zGY1W3w4t>=oL5xJuNW-BPEfKk`ihpp)mr%qZ?EgXq!x&QY}{Q3nWEViSq@}kIJp+0
zr>4v=w)Bg=f?vsReQR9CUl=Rrdbql-qg{&k6^LJajKd74pIUW!Wp`lAEO%xe@ilch
zhL;WjQQS8kM!7#Mcq!ZqU)_wF3O^xPV`hg|NX)w;ptfeIl$6T?MnO|z2pof5ii%)C
zlc1`K;dA5;wqVtYh|7mBt1XS04JIN7UsqNK<m_m1+KuwI;Qs*r(;HG7p}nj}I#dce
z=(|drbry}tG6TgdYa?Lb9TY0u6T4J`Poj>>p$CN8^&1$Z&v7G`77Jl;3e;pqASA}7
zCe(s&rOz~^7dN}9`lV#KBg|FUk!1=AItAo*%4oK01v$R&I&cXfYR7_9b55o#-HzbY
zSPas7Bo#TtV)Awpxm9ND02G*BwlZ!Q%GOY$fGt>$Xvs8b!h}#3MyWH5OGu@DZ?A<#
z_huU2vAB{Q3YP^k09w7HjGqfR_>e$s0-rHXA`cXilBi?k-%5;@#FYeqt}Jdv1S%ay
zWo0^oavaJ<BHqdv=s9L!pbEoCSP;3RX*>3?tW>JS5Qf$E8dtDzNE%KL%~vXc{PI_|
z@!1#7I8Jx`SlX~yG?NlI=MgPWGsw}#HL>EFGWbSExGXfi*aK>x-Y#+tdA%sOg>JEr
z$5Tn53N4zr9fxm`g~#{vrOU9mjcd)1<OO_4#`P%%>!wKtpx3tW51j_WaiKrwTZ&Y%
z{{Stjbte^#nKN{6e6h#(3YG~WktIe7Rfe|8NCZ@Ovm+6xAH-9~aZxJ?H7pB8ZENx?
zPP{Uk6gy^GSj#g+*DQ){VQw|0jZP5=_r!K@5I+@1JH)UoIZ8D05Gp7{V5@-n6OTGL
zXreN1=KNpCRQ}3&;gK}@IYyMHC_4o<3Hel5MR>BMz3YHCI@C^qSnqW<{WPV5C0#9*
zRe19)a!qhJS`E^|MfKe5Jq1on9J=28k6t{eroF6qBDK2`OF2B7?o9wJ2XB*RPo119
z`rQ%Qh_k81W3g<?bRx|0B_rp8O_pe{;bB;z6!1uORdn4Ru%YCi68;1RM!BUjI;IkT
zoDP6ss_sCtvA)!0Gn_6>dZjXZ)q{<raUYDC<|Du=cI!^FVG|M&h_FCd@m-Iya(-zj
zq#Hz~6Yd1DA0ghyQRXOXarqh+3I^bfY&~igxIO!VIRsLYvqSX>7G$O+gA3l~mN!N$
zm(cjN?P_bZvB?edGoP))awsS!W@4p$fD~UeOp+1r9RXcbC>1EqqG!%XG!#39y6?i~
zs1ar%&ReUUJ<5t^LZGpdSrc?nNxN1!^dgCMAsp(X?iQwn5_xygHjO(X&?yhxiUmQE
z3?>CGOqmo~N4Cm8Gf_hF%!r{%q<;bmW$2_NsVp3q1Q0cAiyFhT;<2VNn$pX<e}=ww
zd1fj)gohw4&bk3oA-Vzq%)>Lv=Y?C^=9c-TQdL~?RDD`1ZK-b%)ObM`y$q`qEn#-@
zRrjkJtQyBm97K4v;mG%!;S~g`-qFV>yJBb9BuTsWMXVYk!GUv~;=`@qG@xwFYnu6~
zg%4)LFiU;PD-m{w64zYibjVw<rLas=vVahArk15$i6s`?D5xb0$h#=ulgOmG7tko>
znv+c6Sh+l(=}YHjQYilbdh3}cB;}P)k=WKP*7g>&uB3U21TRq&IRGx2RMDhyNi;$;
zuHkAtA}S<NrbYweb_V2{S-c;JHP@a00K#6S#F#G9s#%zuXlWH5Adj9oi)gQP*sWaI
zWi5L#xljk0tWhr_F36)rznx&vBzUACxoZMhmyk<T8PNb1R_T&Sza-I@sU@$`={U88
z`!!+b4z3T0E^dysDM=j{M4hA6B}?pktx5nSwe<^^I3J*-Tpxx_8FIEl&E|JBxEPlc
z9A?Hy!L!=i3mqwRif#IU4+DMUL+3_Q9EUIrA7PkM;h7N^TS~3_(sr>GA4V8tcC$RB
z49bI*T2B;@@Z=SSiN0wOU!rJ{vJ-!<=V4BuA!|8dRt)D=^CZ%b3jY98`zlF|!OJ9V
z-5RsqlN%p`{{WaRO2vBP4&fyoz$Iw&78bf-&w;{WMj6tqLB&knNq=ixzkcKItK^cz
zg2{bArIGrXJTa8`R9p3|MUqrH+p~(cYxy6DnhEsBf;$g3wWzUuMZ{$Ls7KZ#o+>Ld
z*w_|4dUvE#6h(nz>3f2e?DPwV`N<LW2PKef2-2ica;!od?x3B8w!Jz<92ju9rFDm6
zy<@Q^LZ<oCGm~U1u{#=-09c2JVWQzL%N^L&_o;C*Kite~6>KvySUC)CpdKp+J=S1s
z>RUpj9l@lC6pU#W33<w+nwbpEEE1bDLZ!fPKqTu}oN~{GL<Z8v>|D9*0npYidwWY5
zo5)laXwdMBNCZq2{Tn69uivFSPSOXp^&|j;eYL4rCLcc02GAXLb6EM=ad|@-S|!zt
zukfP%LA?k^Mt4xtuy1+1i0xR9q@9T*fZGFpO?yKSaZWiAN8nGy)KDU!VQhnT2Ht%0
zMTb)Cd|rZ%72m9vvba7Hey}@QiNg5C#PuiuX0g-AyBZ2hm?lXa4?*%yN7A>vw2g2W
zTpr+qMa_p{f9|d{tD$)x>~OTbHGu=?3INOiK3vdTxQK?Vq;p-FLuK^6GKDO5RUVrG
zLeDYnSU4igsHKX6E_4+pE-6z&r{WbR4IUOgET%L!0+=aj3X7d|{{W;=oItX-gf~oB
zx1QHyQU2=}4fDE2FJr@7n!=XE&K<4cYl;v}EG{%ual-oE<Wj?s7avDD0jy4VVY<;D
zyAVZ@yw+BrVORq>a}v#{c4B?wSea4Y0IWfc8th9@i6UedOr`X2fc7@MBL|F5;S%SC
z(2{B>V>f|}muX)m-!K}jLy40Q9vv*1x+|EpkGW^#iV)se<3(0zoN-}gm3x6^740ou
zQ0D2v2B2K?O6A>GHdAg{M-*P+1012PmcTZ`p2e@&Yx(}%62SyRgEl7Db69L#(1P2M
z8<n~FF&Gua+q0yN8?TzU6zHvE#$kJY*LpX<sHF-)*$UsrSc_~pp>ns^z<<)PV#;}V
zc=gLlPf9VlZXD5Is>FNGrOgdwZ;7w2w76p!WAF!Z`H!0$3Pa$L?rfuV9(9Pz^GNUF
z8Fpr%ea8oDX`!NTf`Jm@2iG^yc~H=q9i?zR7byJcFz!HGMyF27DEtTB9*3GD>cc{=
zx`X6Fsev+y3GukwHL5i;yM_U>-(4R|3XBPGvXw<L$;N`@fxTl<BA!LC7&sefQrj{3
zs|=Zx#scPsJ0TC=<*6|^eyCl_g5=tanV?2;+Z`{Paw-)s7H|5^PaZ<026-bI-O0X3
zYF&IsQ`=t0%98WrXFEq2-|^W+C<>AD6cLL7NH2EW`u8TUYaPh$Y4GAkPIWmz9rY%$
zn1M5(-D5$e>7e<{hSx0eIZ%AcsIa4jlQuIVtcf&QrlW&XBvSOp4Jw8rl-Q{nf-BGa
ztc>R|umNcq$($oGQ-2SZO2e4t5=4LpRTi)uD^?5H{Y*+_C_3CAUhPe|I~u)=nFA?4
zrnz7R>0HS?iyOaI+U4~ou`xIj^clnsP1UMQJVA+Eok?QVm=8L`${GCAXQ2YL55u7r
zQawdVELAMc9Kd_QPUD6Y3pfgIk(G599l;m=TK0^0h<m9jwWUA}LV9o7@-53>x{-5O
zl=0;^c-?$R>D-~XtV6Z%uA)c^0e_q=^aw!Kv2orEOa|C_lj2tfqCpvOr=%~zzX#5P
zLl!0Ey0gm60<WSIr#7X;j55emIZKiYD)Mbp$0Q-xBC~}z41fSgRusTKD-4i_%+U*H
z48#FVX`B}l$ufa^$lC$sO(BO3bh;Sh@P!p2xO-#@$i!$y{)d`UcHj==9q8Zo;8Yl>
z&|U2wsWR3sUc1IctnvWOZ!7$m3@#ZUM<Vk_5{6K|PDy4zwkUu`oQfCL#=FZZ$4R3k
zMWrQq9sx&$g4%YwkxEHZEXteuUXQ<NSiP!L5+qJ886_FN5lP0SN0njV4w1IXS+d{m
zsBZXqTi)|Rdm4dq!HG~x<l$TjJ(wDlsu6w*(*5_n9SJ)hTA414&yjkU@7U7HLrENr
z*M)&1CO0A3bktFRyclq%PnpDjjUeH>3OLLp>ejrHOEZ%pWBjUWNhV+$glQuPKLJq4
z8cBI_HUgnrqPBuSyq~Z?I*qS~fw?1T9C!Moic@EPCLroRkRS7!oRSpSgt*n*_XF+%
zgNMaVgZ}_{lzxbuQy@MPGpHKnwL@>4#S-Ka5xJ0^fvjA{_;}P62tn`;0_#qJa9A|a
zP%eVrLb`{mG-Ar2aHQ}kA$%0<ft_M=?#iQ!>IkPdFvFOZBaaXPX`eNK@F3U%PJjVY
zc+7Btm7lh1QDv~-&-<eglMOnzYupQLYv!lt_*TAGf?XI3@+urEF?EQ%@xv=;i5*)&
z&BJY2JWyHS1r=q(Nx%!ESknd7KXoY^vfFFcEwkQcvMEmyZ!!R+_uZ}2iM+}1C4a#7
zdKXdTWnuaXV{FCeWB&k!*0TZ}b(3FK3@UO~IRW=sv;f-M)(K1D0sbr;#yr-I*r;Gw
z0lk!wtri4HDjNd20Xl9p_{B^^$BB>MSvZkOcu4P-q#4ps;j?H^8}|XL6^3~wY12DP
zI?7PTebjcfVz8|a4jfnSVCtV9Y=w(?R5-Ms4DMM=t*t2W>{^}~!@(F23!sdfvuYWM
z8`4W0h>E>Na}m)(^XFZBN6r#d$m@xbY=xGgj6-sCRb9v4Y8+JA#kFLZd!W`KerJZU
zx$)}F<zZNGu&gdwmNM#CmA`N=QKnUV#GfKIuov2%*Zx)8`-Fe&&xOJX!>0^fhN(ga
zkYNmW$TEsO@+~cb^)dMZf#nf38j&s{-t~R93;Nfb>0P2ndh(1X>TA4{f%zz|=RB4F
z04gL(>}GpcbE&SBvNIqI)`<()15@IoSh~!hG7w3!uI7dwF(Jcy53WmrsS-E~Pk@E7
zAR?g>>O4r73dC+G`!)r?s!{-w0CIpwpBLcNF}YZP&W1C(x#qCi%_zHAaH9IL?6n;1
z>;=QM$HyoH(F$UG?D>Gu`_+@EUgIkdAk_enNfV`*s#u(?w1dYf({1YpNR7^t;@`6N
zTAyEH`y>k_N<a9SyoDrj$l;HUS1f69*Hsz?3mng3{%S@GJnOB10^xhLM!pF4GJ(q<
zt5KEdpcd+t*@*gsflJ}VOgZPIhtu9X3St!_LAL_Ju}l5C5~ns)8uTLWKDD<rBQ9Ci
zNIk=1H5!pwgPxOSOOfv}HEVp{CbBP+KJ8MgMGQ^iW+#O`t-UmZF)-&<wu*{)TU5$P
zdDyBzWEPMu_@Q83bXyHKJ1C;xx{Zj80lPbHK<p@Lv7%XY><2XWJs@<7GpJuvx%nnc
z;6?!|q}VaNG-~MUvnzhsdyhj*g~Xb%WjYn?p=lv}JlL5K6~nB4^V@Aldc?sL%_5M*
zM;Wwa$88jlGbpTF$tG+YpAwO87s4tA5r7iz`30`kG+iTze|j~(VUw{oB8B>RSdLrn
zMshV~(ts9UUAET8@-%zKn1uU{){pSy!V4er-lZ1E2?FQp6St*dK9>WDZ3N0Vf6>J(
zpZ@?Ogw<t&W!=z<RyxfHB@heyz}={|=Z#l1LjBS60N#eCgiRFUU*9Z(;n_$lq0y~a
zaQRsxA*Sja&hfF)W1xVv5O{yjBVP3}gv7ASRl$`@8<V}QP}}ENQ{j~da=S9rU_K&T
zFzE?V4r1JuU#zQGjASVgE2v0Kke@cJKp2ExkY|WUO{~VFDw31C71lRB?ld)o!)Jfz
zp5TM`RI-;c*fM1(R44~kBZ{@CC>9^J_T^Qs(JM>(3i3dM^E8A8mF2Q2ZG#n4UX3BH
zn3RBEicXpM@*f?lDHSDgGqh?L2F+yLS3)@?aEzf$qc{US@1Y0#oUFGbY~v{!_XeZ)
z0zLBo04=tz%<jYUHReF3_I?<!^-5_O3@f=&%XSsB#}LfNoTTUlVC6)LA+avEGB?&I
zfk6Q2i;G5fLOFeIYXyl$Ry)eK0hIXxMYBfWf#+uOw$zgso5WQovA6&l!;ldNh4G9$
zzO6lnv3-P`jwPIMwT!}JMC`jHu&vB%<ONFrRvnizGLJ!?mCH{!-t4w0o^=+12gXMq
z>S=T~+G0QZWAmYPo^VHi+T|AdU%MR^t(6d8!_PYTl65<p=v>J9HJgaM$ovHdF7hXU
zh%Ic&4gJO%)*3>i6)o~4ckSHvrjO|*(>u3zr2JU$syQ_CWIzGPsn}AeG9qS*1$Eh*
zyAi;s?U@qdG#%Typ{%mEyyR+GjWhu#i$KAyTIo>TktJ}Yt^mpxa%y~3am5|-s12)0
zA^Nn4@-i{F$R8*-;I`pSM;Hjrbz>g@ib&Qp17NFCxI`OVv9J{rlzVW)ar+VpYy#gq
zFab5-Eo{LQvHYt#_2ORxJYe4`2A*DvLnNRh<kfSE3<P+BOTUb0Y&asmXc`<uETD;G
z<ce&jX<U$8NG>)bMzu#9t?i%&)>;-f{{S^+Dhp^CPUFs`Y^sJQV(fMrfC;7-=s{%y
z+!n6lQh!?N51M;PRGDzHa3ma|qZkP;_-u4sYtNC~QM*10LzQ377o#$Vj&qqi0tgGn
zg7xg|JK-QnlnEh|5aCF;-AL3|wOySbHjv>*BerTty4WmSMHWD#nXX1rSb3zApe9*g
z$A1V5!rx0%Dm=Kwi~~HI*dMAZ8zN!xv5kWhm4~4O*R$_AnY>w8AEQ@MxM8J62xa>P
zkAV51xTba2g15aZnA0g5gtBToP!=RBE9x!*;P3J#j}!=GDtQEo^T?InS<8M(1u7RJ
z3^|mlj&&_kxI~U1s7oFNg(HQR2@LYe%imiBHl+4>oGvY*N!jvd8(dnj{?Wp!;$C%)
z1Wv7RuJ#rtu%G)Tn3a4p21#X1R!JJ`@6`BTW8%gU8Ijs)Z*WQiLW4-Sc_zcNhcUAN
z?+$KlSecpdhp1X<J3_I6bt|!{ngv*6&ntnIV<oNHo(NJ#FqnX7QDV~jf)@V(Cz}CY
zTK<*fzw2LVfUmsQ*+47#kL;gj;cj`+27;M#=L1D8`jr&XxB#CS9h7KI$^2?LQxFgk
za-@5OVr_paL@5LkH`4<8bzN5c@lp^J1PZQD4+y`d@696<1`s(WTYM?W6@+VHu!t@5
zhZ`-1^zjKjo9wmLC0&Czc1_q*E_r8f{H3EPSRp^cguy8xzR|tfm4CG2ZN<UJo_0}D
z=m6aMd7e!mDJ!YAZt<s=)-(mCm25go^%sENdnlpq0r-s%;sNz)!ezPx;%9SoLF7*6
zv7<LhMso47BfvI{jg48^(PX;7kE3-hQH>8SPVC*<xrun~nvq$u+yzBl?c^y)w1tVi
zg{}<-&5gutt_G>5-AarWcRbs2PbAP|bFq4DLY-~q-c&W3S2j`3r?+8JG+}}`Rfx;C
z7bb+IdQ&pAQo0)j&Hy9I^sklF`^rJF6?X8J&6!jKoOx@#DFiUkf;9$+0JVU<y+2|#
z1^%;Ng{a#rv}7p1VfBqmDJWXX$rxR89tB1(CrVJoY6iG$wzmMg3z7!Hx-Bc>WW=H%
z?4b^~?hdrDEOOazlq8o=)}BtADbvQyZEsOTT1eYzNYsS22pD9MbF?m_U>c&dP@4c$
z*k^q?YPZQc6!a%zDNpu=#n|B$#_e{tM*dTJ<pfeR3;zIjEZI##0hUF?AjC;vZD<HT
zsi|ke31yX4q*X`CY!`4T{h85=5b^lWNy7Lu=%-rEJIf`*rXhrxRmmJ6_)THUhj!M&
zGjA520(hzM8Y?yAiH)p9&W80KEg2Uz?<7X{7UYU<nxm<@mna+w7m_I^bj3oAcZNka
zXHM#BEIg8<k0DYxXHn)$Yu?1(g8*5TMe>VkKm_`lOa$c|XjJ4R5NX@Q-IsD|S24V7
z*{*C@Ft3@JR$q&$m*2nFy&3w2q#*;w6k5!Ftt9${7A~baZ0qKCtWGW`!%CQE7>JWS
z-KJ(7E`cit?C7wQi4ekO>7k5~y{@LQvSDOSyvpu|0!j4-^?<>?7BT>Q@kr&!aji9j
zNf7BV3wtfsE`v2OC7Ik@lgT=o@2NG|FZ$Apu!c5lzPSZ^LkTqUL~N@MN@Ee!owU@N
zKGb|RG7hK`Dnjb4Q0toXK6wap1I)4BHbI$KCy(?siJub;vqnIN+2RBaB%a{iT9et>
z99hKt;_EYFn#~f$*#%1i%VammA7yUM`)%ypJ-^5+5^WR+d_$7Xegp$k%_RBU#@AN}
z-UV*pRqxV3WP6@+ji?-<*#-Xq0B=RXC0kpmxB!viH4I}kW!Zo?*4MsU)Hg^XAGw7>
z{;SEX3c3(=W|7#rWvG|vFy~V89YZkW(zo`EMeaP&4=iqOYCSzqVcecgD9a>^r}z{4
znkoY_?Gpb0`5q}ixbA$Yo8`T{BT^Rpnwt$YGeR!cdw4B->Zfy9loymA3=wnaDg1Lv
zcXp$7W>e3VS%b@|2VFol3@tDyY|7~1FmELWqd!kNMiTe(8W*TgmSSyT%My8|Z8$IH
zXpVMK+|wJi&aFf-ieSZ%o&zA}q3MX7+Rq}Uh|aqkP-g0rzH)WHo$D2XLoov7nl~|L
z^&x6DWC{YSJ&(n2>p<)KBVrAWH0Q1x+zL;JDe|Rq7Hv#ymdlid)oLgeWe7>?W;y}o
z+|$Odi<|+OB|4C;z));!cM&dw?`oDdj!33JRl(y*f=J23p94NoV$0pDmK0YjI_sT#
z8ccMIpzo4U9Vk~esM|ZS(0Dbl{3>U0?Cd0jn3BftGcT^ff`>SCjph(3)Mr$(r5Nw6
z-U;E8%CUG!G+fz34N&;2*!anvk%;PaEvmOFxvC;UNtVkpumI;#w%S%DiH3HRWP1zT
zg$0k5Nie&(1)ceK8h|Skj%-h&yJm9UNTRWmNbusGBGO2Vd?6oDx>QV9&KQ?0b<dmP
zEzLYinb7!KsM&Aib=I;ou3@=V&<``k7bG>Uo6e2`dw-IYf*7y_5zRslMUFBB&gP2;
z>E6g#b8FYydV~Wkff>REHW`l>rM6;-09);H2A8PiSfo>$>m!mCNZ^txVIwm%u`>Z0
zl0}0b6-PQj^QV;b9$9_FLZFr=rk*Gc5is3j6VD^XA5rrGVq-U?mn5vCF;J~$AaiO0
zbimGM>kLyE$%br4h@6+PZ2%PSfgaLqG&hCWVwgzKfVRq|lJ?!H8`#}J4DE-Ju~Ee6
z&g5^kTON}In8Z4GxyB(xZkmForN%xbCLx-5jE$X@9Gj3&dV=L9f(YVb>@u^t1H{I$
zO`8#CAWBKS+zk)Q(3WIE!Aq<n>=V0re$A+RHw}3`P-qQdCs)F<v5YY{xhHlU5mPf+
z`9vP`k3I!4&y`P(_O@nY$^2^iw}`iWOC3#E1`2)U^ZT|nJT{G+TL&A~Arc(dxK$)I
z4BzbhDIPfq_ordS>L~h_P(hRy%5oFNmL{VbTk7}qG`<FC#lRe@k-JkiQF1Oklnd+J
zovQbC`oz*=6FTKAtg3Fn_iA=e_IJ&~iF1-P8FjTzGP`@i1w4Ax+RZ0(+tQR9x8_f!
zJSJC-baqAJ{rss<xnev7=siH*f*7$g58?oB0(Wi+s8?P9QN7P3(zb|nE=R=o{V3>l
zzEQrn=gNYTv4v(bw&3R2Cvs~d2$vGUr1K`)+JkE@PK;`{*6j5RQK=YT6i(~1=HA1b
zRI;?v^E{=E&Q#;d^nqf+;l`m6G(qNSX3vsRLu>X@iObi4iBM102E<Ug@Qdg^U$ts0
znV9J)dvIuJ8xPmcrHHOnT*aC_3tP^P9K7)`1ce%#gyNhzEm9B0jBFp&9S^ADjn+hQ
zb(1dFsMIqUaS9{3+c{<;-a@5iD3Lk>pf#T|>Hr{VPn8Pv@8L}}C`j<tw+BN<OruZI
zq#^-r)XE4q`>F?gG@X&v^XuvjDhQ{+v9W2RBy}!$am`@xaw9m^46>1x6x5#3)aq=o
zAR%wSxvl5ItE;t+hfj%5BAERy5Q54Zl7mBUAy{NaiQhoQQ!T&6QyT(<sSX_WMfl#a
zarCq~pA8f6NZFXy9~%VH$O4GrirLi=@2%}Z#4bx6dy(J0Nr=M(<>CgqCAiqBZ_I0I
z($syOi2ne~H56!cO!7$1a)m{t#~33;Dk4y})wwjw5yX=tS?)#iT<Kplb%N^CL?r+a
z7uK;D#1lXp-$YxfBh=F1u~>QimXWowQ^@6`o!e_DBg|T{p3}f%XIrA8J`(xD9ZAkj
zVb;XFQO0MxF=Hr%0jO(JJaQ~%BZy2iiFHXMGM2OXnus7m4Tv$jI<Y*kXC~&89UdQ|
zRI@RW3zsIkFv*;tLVBnlU{8OR2Z<i-sWOrl!=0-!24IAsE4|34cw0NMF@<73dZ}^+
zVDak%{KF5`%`DEq7~>YSV$?9$xm6<y(O(HJMo#3i_=O*5M<JQ98C*<b3aF8d&Bc2@
zXT&tAWGMtzJu_|Okg2eyc3{1(Z*SQi&BJ}(0bNXpg+<UVgx}7-ZymE=OWYH2NoH5t
z$D1hH^!S)o6Ke>gOKVEr9@Z>vYt})O9jgxsomT$y%t%$K<h+9Ra)4X~947*xQ5;UX
zcsN1+f}H6K9E~rWotMgq3DiIbmQ?I2D~EE|@%&_dg0NAUq$KKA_P3k8Gz%OtbjSh7
z;QV!rTU&92SvUZ1A*qMbo7}HCYn^ZDQo<x9pT;9Pt1|E!nJ)1ol_Nfv%jZgUeVR*f
zwG3bYd@CBQ2@t?F2RLizVaYr#F*j}X^6u5t_ver*y^ZZ{*nYJFmbMZ$!wEuy*>5ha
zzGAc;R#P+F@Ll<>0~zFGfeU#pFxv|aoq^id*IIF-zm3Qm{l>5eiH1houQ9Uz0;Xe?
zOXX3|pcJ?X9o9`%AB!J4je{xuY4vQP!{mJegarOHc8z>T^QGD*x`KNR#apKMXI&I<
z0lM58#44g<k+P^!x|`BxM<d}XYl|ILn)XH2jY%nFLBi~}J*}xUo69bkSlhBjJ?g!P
z`J&{fu!d+@^ki|cAniq+XSeX3Prv3n`Bn7SLN^D)y~Rn0SzF0bPxUp4RO&!l#4-&X
z8;1vDND2ds!xo(sa7u4c<q))XiX6n2DhI;WT&DFTin2!(k`l$2OMp&*iwm2Yi43HZ
zmvy)lA`(SBsADEJIu<HMzEv{XG*@L8-^H6TQBx`g#X>rmloD(&As|*FCOEjy!8Q5L
zIjM1rJHZ>}Bu1brf_#O=5u8K|22jUQ+b#75qr_p^xf-_=0)hp`a2F=G@;Z@M8g2zP
z4rTmM(n5wtg8A4pgtp?a_=#ePB1Lu4Ln}$zu`LT?WoIl3SQiL83M{`iTaW-MD)zCg
zLd5QTF(U~i>E%b)k~OGeiLgyOfh-NuGZeWiuftROG)C%YCNYZ;2G1ZvnO8BfsXd^N
zg@y*}VdX?W8<hmxgHgg|b+yXIH)C!EOFVPB^w#C#7E^kj65V%-z(oocx}w_l3rQXZ
zNS&ly2uLw%Sj^$`dzRX|{>}nqgb5^ZW|+uZQ+=|~!OH{VaM&<oNqXgy(b+Q?)4`gK
zI&4N2qbY|%W>BQb7|m@~_7w|8&x#?P<uMB`Wnxy^YAsW)Szio(Z<u+A?LnB25zw~e
zd7gi`{{Uv;g2p#%Mn3^f5J-Lq$tO^&%|gYp1N+3~N0{7ETljpr0CC=j!Z|zf`VDC7
zGcUM<kS+L9A;><;ij|{99e`~GhXRrSsH<Rt?YptjMTJFhW?$ValdN%nR-(#Wjr=0k
zW55(Yb%qD%gYXY6QAy%}X{qPQM*^`;4AVTWsP3_V*%d|Xq@C#|k+5jjcLrSpH<FDI
zRwYY8hi!T{-QK4vQC$5Y9rDyOtSE`_79YG}M<jB}REL+OE{fOeD)$I(48M+{Y82Fg
zV5_hSKS5DFql{|K!<HPH2*IZtF9j6#?%UD~@+){%g8gH0m3s<~63Jp*GYx`Xpp3qA
zu*xnJcD)A=ERFFvYu#%W>XBr&W1B*rE*NM{B!IGy6_)q9kywfIs*RE<6taLjRy*3V
zO8$_71$*&A@&P1(@E6QfNHauyBdO*&BBfgiislI2&y`F|L`K89{Dny;v}65EF$5?i
z9HVQn*J>e%532#W7dzA<=*Lo1LRZgwik}X83>N-07geWG*TWKXsXFUU7+fJ5jrAMU
z5;2tWsQlRKM|z%A!N&Zmu+1f_27*RIvFBeQYQFB)b_2@RtW~anTPto2V(_xVCG;OS
z!;GQZ$c^Y?ghET0mCwa%>;W}^#ZMHNixv#5+ALsd>`v7JArFcId0#VF+<U3%K(SJh
z!C-+&7Xf#;q{#0)1!0w1+vOe^EqhiX=rK_nNUgp}16(6{fk!a8yF|=ItWJc<dYW>P
zp*h4vb{*-~;}au@`YaE}Y7xXN>ir|r;Yc}?$+s1Onas+TlxVgLucmc--sYvmvJ8Ic
z?YD@YI0lGrlR3MLyQ3aK9MHq0iY@g`>emFF2qX?plvt6XjSn6hiv!xeZ!i5cu%lve
z4Jn8O&H{_Bq?R><o>W+(9tJV*B!ux&P8IVxL1Wy~M-7BzmCR6Pwyi`^(Gupvod*;>
zl-|&a*`zWcHnr?B)+h@`xO17A&^ie2)?mQzQDc=NTj|qX9_!w*C>bDlfV`n}xhCp?
zi8TcC$u!0M4ziF!D)0rW6Cr{uG6hJwx;2Ad_oR&?OvdCQ3o4HxQQg-i!>&zp4nY)6
z$vTox_Y7>RptBR$0a4&4#KmYdZjscsa<)$FD;h+P0d{$M4n|fAi&4zsqG;JfJ&{?M
zm!s^=HM44?=*G*<aDeA!KjF|-z`k1wZQV5dYh4#2jqkV=nR=jVZcTwalT8q3X#60#
zChAV$0Z`?T%_fa2DZhXnNHpwokZfe`SdJ<&{ia}T8h#X3^3NaznY-SRheaD*3wVk1
zG-K5mkgRRkb809pi^tAdG+qjWPS)#NG*LO>2Q5;y;lp0`ao^IUXGFtA9%&Q{9h+q}
zj0m$&iEu~*>LTpkbc8%OXR#ptd1(%;X&TW&cm8JcG`cxmo5*=~uDh$GV6%{d`G{UG
zPmAiAW@5cSt#FUnacYPJ5n<lwqsX;J6{U_cNWR&dxu-`6A7a9xnmkMcx)Xf0iNdx?
zd1bg^SS)&?liAMSgHq!$LqSl4>fzEm^$dGuZUL$1c|z#AIlh;quv|1_B8zEaH=(Ep
zZ<FXVe<-6kS(qELC|?M_VsAogMDL>&%SncmA3LcQ6%z)B8kT0i+X93N9!OInOyK>l
zLhng%w``z-Ndz$2wbWG6G%C7SnMJD!?Fi;!&rVgzdc>765^Z)+bfVdA5Rl$r(VR-?
zG!dv$ECSS6N%0a(DNvA{OIR^4plc5eVlIgwb#)OZiQB?Ysi;?{?8sMEa85>){kP!K
zg$aQgfKJy<-TRZJ6wIyAgJaH7SV<Mm8Pvp&_9ad)!wQmDiy4F0JZC+P$=Q;jd#m*>
zCXCs^BCxon=}zU#ZG5+0!*f_XFix$@D@!5wwcHEoQ-bhG*I?HI_X;!urto5N4J0tJ
zQ>S7@OxYMpxfV6s!~xV&-9u(#2bHf<;N(M>lWJBBrAX1Xx#qMdGZsFio6|z${{RiC
zFpVZ6c~~keNJo=a7I|~W0+&hVMJ?2QR0KAuW(y$<7enTDr1oQc+{pbvCh2Ob$95)$
zAVl6w%2<AtVhy_*mI&Z~0)k?TRZH7N6%1<@30(9HYi#STn~jYoFyZEAZxTss-RS!v
zv51hhn>S0S0l&jc_+yE1s+d?-c`^vIH;Lus+d)%Jh>s4KnFOaG&Wkw@u;gZ>dkI}k
zqt7j=Vh=3wf+TlU)no0L=qQqH+W!C}q>Q=Rz?jgvT{$3B@~m-yH+D7xx{dS;G;loV
z0U)Vn@ZP3;M0hBq%*}|J02!hMMU?6QExD{LxHQGa@QBq$HXgDRA&vVQyx-g1Fw!U;
zKMX)i<GDXjRuz%g*@6cL4BaxW@;1)ps}bz!@YhfzEN4QR+>0vK7umQx*vQU#B)nOI
zUxiZJQbr>VBSd1VEHe}XG4nLu&co$Z)SDo`pz}0NkiZ0vJzGT-tXU_PT&yk1*a1k&
zRWfv=E4`R$d)63|=c%hdZ$BYWlI<LTDu*J$pSctcewhQKA0UzOG2v;oUIH&J$A#`|
z5JF<HfM|!5j)2W9r*}NDH3=dydlE*u%G1b&qFw;8X7o1FvIY+l0?TuhWe1Nswz1+I
z2S4ErYG74yxRK*)@d8zu#7suE8-jVIIRb9LjV*Jqt6VnWJt+YU{{Rej-|rO)nGBA1
zw`v+@`rl@zV5t~4WnwM^fwM5w3cx~%h>^4=X7N5#<$5?1G|I;)XI%wMjPVfLE%K`0
zh7~l=ABw@QpxU9vXHLNA^)Is`ap=rVER)7P7N+*33O~TNG`P$}`FJ2O6cWMR^S%9T
zOS`-D*YRp&VJ?oO`id=W{y?OlCq^5U_2g3wr5s!^Cu4ffGKF0;Hh|QmD~sl^h!#{l
z7ABe-ONMis$Iph=1GN`2G6F<}Ic2C#)rkr%Nr;hIPKv>h5ZY>MFHUudk53bZdj_~9
z<#js>b99k+kL=0Hkyf^>u0Zl8k+Zy#of!G|@=;0<K#w3yiyI3P4Z{;l?3amRj`ml$
zjFIMVSX>#zBv!E&@FnXFE5ia_#3WuFD-D!M08FusFO^vDYIznsN)A<yQ&`LrNiaRZ
zD9kTI2&nFN9Tv64drEbWAhoApKm=5Y(rF`&-Ibh{&>&-#I5cAlvWQ5W#pFq~LI+8#
z*G!6Xxg*Z8UqvH3bp!y52LAv+D8%UahXySZ+;rrUHx{RGEg%Z)8$id%(oXp}xMsc2
zdiuYeYx+@wV>`&|iP1*81}qI==VhK4otbeGbFl)a#H3O(=s;s?ivk`PF<738bxMzY
z_cq)LUumqXA1sDEq|@t|?kY(J=o#(JjY61iym6p1AdWtpgL=l}&L<BxB2yC~;hkgM
zs}1bbz=@Gdmqc8l$a{d*)ON#0?A;Q|*J6Wfg4KwVByuo!GQQbWkGyNFBF{1uA<vQ4
z)q_~f_?AYLhLq(*L|s{$y{RTGeVkPQfma8sJ|LY`H8vO75*ekQ%BLPfxI|Dbm1+-a
z2Zb<@EMGIh8;_<a0b;<5EkIyP#}gRkY%|<U9iGY`eGoCGoJ`nhu|>qVomjYg0;yQ6
zL(Gu~#HS9<GLr+zc2jDZAx6z`vMw2NN9&MRf7yR$;m%NXAVxRxpl<kvDgyV-B!;hI
zm__j4w^9E9prf;6q?$&z+@M!%CL<)DaBEUrj5abMoD<52vazVFS@A3(!{L{kBGA_z
z?G+jmw}jKi+KpQ&?R~v#5J<vD@XALY=xYq5wn43i<W$Z=nN-H?qr`5ff!tIGs4&=E
zFp1lch+2%QpFYL8#JV$gVge;9DT2*(bNy*942`G*d!IUeUPm`)^CyL<gB)HxoJOse
z-bjh01No)4w*%@8?tN((WQc0c#C~R>aL8r%Q)bX^)CnSX0WjEiZQWF8T8VPY9=%3$
zn(oG)P^pGuKv>gY2&`6(7<|e><T%`LbOye85B*}kaDPEb>|8KvF=8h^j`cLNVwit7
zfolPTNSprgyl+xFxF>}Mz*X!(1whI0k;N<~>K5B=SK9h~fr0RNi1Qv|gK3^Ha|Y8h
zUr=<ZAuX0Pv*k|+yHM!JvVatYV`ja%LrMcQsHDR^{x(snlg+5HXlCn&3Y(R(_^G8L
zG-!!-2V0^W5uwnUg|Z18b?iHfcs)fk9IXjxOAZUhYa9Ei;yON>D+8q<!@HA&h(1ZQ
zEq?0MiHSgxi=dYbM1v}e0hww^lHDlP2TvH6U55;9SifSDpqsXI)PQ`7Rx=22(8z>X
zZ0Z`oRw>NzGaR9oO~5_Dpx0Q6SoaD@-D&0%PJXOtb1^ok@XCiV<-BD@VQ_~Pi62>I
zdn|wBsPRz6g~K8b6P3@FD`*uKqD-uqOi^i<li^xbfq+LW&C}JhwE`hHhI_Cw0(DdG
zQUcu~GEW2W`8l;Vonzx=WAMHI03%QmU@h+fy}s(l;Ya@fQ9LXvIYJTSz>svT*1wS#
z6)D6-P^vgFlj692El}ovX@{93Mr}ofs}YD;+1K6yyI!I8e^?Ae_PoUbv1GPty<$-o
z07hKrVnz7BHGqh-yEb6*6O|)NZd}qqEcl7s60pMx=XW4#Y%2qe!KI{xM$HBy>e6IV
z+N;(J+8D?NHyH?<4HR&#&@m2~822h`4=XZ#2~M^d(^!K<hsBzT`!Y1Z6ap+7;8_{n
z4eZX@4Xs$L8)1x+$VpXfV`8oc;I%4&G&4q%MIcjgog5HKoke3MGvc5~^>X{0D7vYn
ziYIW$_gK()8M`P0O7@-_Oia#HyAG6%6CVI1*d;@YK_^{$Ff#LCb$WK4l4xcULa8il
zx&^sXZ?#I;nDHGb41*O3ha@Q+j64aPmTFeOe8D6+mkwZrq@a08y-gN-b{UHQ08iLD
z3S1T$Bwl<AqS$j;LnZ(<u(&{WGTV2h(BXZP3L>YLdflaBB|+xZA<DDHK52>#+cN2!
z$kc8V5e(~>8G&y<=)$ovXZBaL6^PCo_;U9Ku=uF~#6N*khR^k@5g;zg88#X0`L)VN
zHG;!GN#QvnNkZK~G?)a4m0LXWuq}HXbhcqwb`Sp1T=G1HJA<IO)Pib6&M_FRj7SRR
z5hcQdZ7yo-mJB3DB);knz=~2cu5;i7`=s~ek)>qtIq*l6YFL^v4!nn4OR>-uP0%*T
zC@0aO*fG&Vey!<4MKcSt+v)@HP+YxyTL2UJ5okoOBuODqnf6xF%4+(ClrjK*JFSnX
zHREN)AW$>E51VElRfdsLT{9cL$AND;7kiAh58B18dWK(|nHcz$AQv~aV{xY5j^F7>
z@!?`0$O2Xe4GtI{21U%~urZ*DGtNyBeOam9os6@@nv-+8QNu1s!S{=6Qpwbrv<h6(
z9R;;=H)<L?4M07w-{eLGom^Wlp%wEccvpD~p$-c-Hx#iL-FeXIK?t}V#{<@*P@$PG
zW4%hmuz+PG^W!uVG|tBC<1V3(nKZfpqh;&>qC5@RxGHJ{GQ-_nDtrzi84lk`2@(VM
z(VGK_12EJ$Fv=<@%w7$12r(JrW$tp+4~i<CMP_Kk%t*46ur@U~GT}%%sdI9p&04Gs
zc#GL&BjZQeTezY?@QBTq)~8FN2NFufIhD9k+Oa>{=gt>ACG~b@UONgc5+_g&nkpMd
zpEj9J$F=JT?8$m6H;=6-Sqj^bnpd?wqHvgUG)S^;@5wbDCl~DL-FA?O%cJ_~O*zG4
zLYpy0v}5uHr<<pAaM4Q)g2C3^jfkivG5bdYvQ1;D9gA)&Zknj^c@lN35&6U@cMG!t
zLg``aw>lfs6)JsbV`q&ZDqJ~cD`KiaG!dKH3i%^l@01H2Z?&p?LPpXkxlrcU0<hlC
zX<|ucNLopV&=aL%am*ydFa||ffGUaEc_y&<7s6ptNw@C0VZ1zQO-YW1MaJ0VK^he)
z>e;9(g-D|77E&zA$zmBu+!~t&D>=hk3O;XyIUPdBmca<Dbg+}7Gv$ziPG%O(V_wIC
zNwEqeUz|H5gfT_I{&QEJSfMzf0g5!kE+9oXQTy&JwH)W>=Qe)>0L!m7y<um<$UTO*
zV4XIJZ0yo(=K6!p4`w_E+AIuH%=2QBW6jkgKtk3R83fpgIg%lW#7dZTP<3Wkpt$U?
zB&`@or=6W5E~F4FX)y*MuQ&<=bEa!+sj0B@K=PB<Dw1;;1K**7o(_nL>+^>WhZCIc
z8Ct+rDr^%%&F~B&82<n<Km`jL7qA--4IhqcLcjRv0!qXhW~JRwBuiLWvx%iGG?|Wz
zZ1n=1fb3_G*#Q1p$0(m2HtrGjPgkVFHX=X`$yEl+akjhEP`ej1xsy7^91@4Z$mheB
zpV<qIG4T_W5&`}euWG{BOj>a0)&QTzy^-x~kv}0NC2jbM$9pv<k*&O=z)gqNs8K{%
zC`pyyiyXU9V#^pz_J6KwR{>E@cY#O?oPolDwMNneocJRzD9U7Uy8*>2g^gi_%673`
zjrgeKv6~h$^s@1n>k4fOFMt#1KdnhR;xPq_HPStdjj0QIW-FYVsAklaJgWRP3e2b!
zd$OpqkPn?S1@lUJY7l8}6+pdAhs6`yTPZr!lE`J0YVOh<*UXM<r6ic8NgZyHuvU)j
zJ^GxY;h=S43*<VS?eWo$AnhA4NZC{j@&we1lnEWP=P__pINeWUUf5iauf&*9yZ-=+
zu&80dgYnMw?DT9*tbQpDsw)>OJ9%a~nxZUZnHTrc)NDG~T>V38e*|l>f3TiIlV1uY
zz(Lqlq*_M4WVZsZdtXcZixt_twzWXLGD!G#*i_66xP}^@O=uak4=J_oN!U{-jpe()
z+)je98s=SWg4~|QnmZR=Rf8L?5#mPF5PQ@^#}Gaw2jW^LR}1Bq)TNLlN)=*MOv-Iz
zxf+^zCCZ&-CBPOMr@9Ms+NM#H4zJM785_+cnO(KnM)eR@K>!l3P^n8fT@gq%g_w1s
zYb&U21kfHg)lTA$tr;O??cziID%S~?OA2V1<Xo#X?7s@qV_}kcLKD}8ioepyumBpC
zDVq{dF@%Cbg|?~<V-?dAfg`}sx@IX|Zn|LorxoPF$;ph^gI>>hrjr)qFV6AvsYM7o
z3dCXJUlGfaBwGWn!Hv(QX9y*VK?Dfng=P%Kmg$O*ImC$o;IgQxptE7w4TP7zYG)}V
zMHmv2ZcX+AjDe#kv-^%MS;13lcuhg=JWfOg#fy@(V=`mnoC0GJ>-<e~)bpfbLAvKQ
zy<t6=_>0XTiOj7QWCt$(E-Mu|m8WZ#iYUA)tJ^bNnu`G}QK}#=?D2Ghfw129sXe6%
zMTHOHewq^UGWlEpYaNAHWcjqh8I&W5JS;)b+RaZEHVibch>_YDF{bXMAAP*dMB;hM
z^(A+aS0Hz1EszcrS!)yQ^EM9{fGY&cs`vtydcjQ?#9{$_MtLWEgC(_cO>}*t@kbgj
zNFQgpR}Rc?<H~LF;w6ShBzS>?Hd`O@QQ|n+{{Tun&g&I+K+>8VE=Yl;KK$jUC;Zet
z7?dFV7Pkhm4Ulp4X}{uhs~^Io0$g9K4HNt#u!z{Ka2o;z@*hEEuW3y9sbu)0fM|eG
z!?Jwf{6UE)r+r%VY|&xLu3+3M^K;1AYySXfW>6vKEHaw^0NLz5vheamIP+((ZTn12
zvGbBXeG3})E&(vG9v=~Gpbzm9YIn@U9~-b5fWuo3XvWzHy@}uqz57?xlL%g4Q`9uW
zK>|UBKa$?EIwMZ(dc*6j_O&Aplr6iU_@q7CwO+ySaxypItZA_qfX^V%TEI7aovC8C
zy><+BEX7B~SZ6ZK$7hj^)f93`rgRX*A1a{(LQjyT&LdF7T-!n_7?8xsHDM{{_0%RI
z&HSnf4pB3-oh3gBCZvo;+0Bt;M!0HsGDQun*q1(BB{r^p3_J-~Gt+@rQ!Ix<)gvta
z({aP@u~)S2(s0mV(^KePuuzpnRRGA|>g!niOp`Q7ps|WJ8Od$Jvrv$$M&1&Z_(0$a
zAb>J>we;S!Wm9VretuC4u~_c63N9{B1kwdnjfIKR#O!GZ>9Q@QX62N2qApy?na`fI
zEEss1kao*@mEwX(Rzdx(7~fl7&IaUG71>Z{ER3gc3u~dRNV{cg4lPl_bF^f$bkyZ4
zJL^n@t4algt89xQ<2ALZ?3jds!-ipCa|O_cy{dOTT!kEE;ZATx#}y-8=afj<y!FdK
z51T_VDHfasAOm_BU+lyInsi1CW9kohs2U1IP@zC^o1Df%wxa5BF@jN+JNzIs3ie=l
z+&Ywnyc)gUjH#Muw6iQG$EsA2stBZs9kA|5nbh4_sTvV+SO{c)n>J-J0jnd%H?dlk
zw8F#$aNTq-B&NzQ$Q6W)yci5I0|SEtLnO{@9fe_|Nm*LfaNB*{Evpjh_*?{MERz-Z
zocsw$z8nSwh$B(vM~TgU#8;S)#`WhTN<RlCuxb)zWy;+y2_94*#40aq%43Lb%o?8#
zMl@oXL!zF=?c+5x$bvz-<~F@yun#jz;3SewYa)x^Mrv$UVr{fRZEw8PI9VpLfTj9t
za2EWvHZ`H&g^WJlcd4UdF|y)vtkOw`ES>;-5u@`%3x<OgGzcUwA%bk~jz*y*WT(gB
zSLWh#3dt+rRV92vjbuQ`YuV_C*plx3bc_{MWI6$3Ord&sJT22haBXJ01F@}a_?ZHG
z=QDfexk!-8Yt>>DHfcvyzZapxfS`UKCiE)C!iPWq0Ig~+6|QZUz3EV@TwlU8ACC2h
z9Y^yc-A}xVjf|1Uxt3=A+7Hy$CiDAFZdM)oW6ncf6@muVIO9QO1P$0wU|~rE2qE)S
zTb7^zz(7C0grxYPmk$6MlN>2>ZCLn+Qy++8WeDSFkwucCVDiNZgcykjGO@Wdkmbz4
z6NZU+g+R3t)JZ|tIUfH2nXEIS;nZmxh|XZddDAMN49L3j?CN=`QYm7VH|ku*bx`#+
zo(v;gswml5Zs*8pQ6^-Hzz+`E56Dw2j%60`6(+HY$gLfc&wC5obu~Y_SX{0{Vpf*K
z^E97kH128{5GtDts>a4fzO3hyMel-uCs)Y7ol1YT;Y@KnVD=1lK0>9=0K*20Aa8U6
zYzm5i1x6pdehWRhBY{&%o>|nDVo!5JRKX#-U%aM}e=In3ryyf-gWklx*;d~LPKV}r
zW3SDXwCc&{O6A~<wR~Lv0Dr;_dr8h04fY}){#wS!Cy;p`3}UdjCBZV^E?_)PLEz@8
zoDvDq1*|XV1p(unt>j_J1K||fvo@Ph`6ZntYmzgn0y5ljNUZYR%LcHx0`(q>TVZYg
z01Ase*o>^M8{!AJtV)%UX=X7ajaflC3kq{4OyfJY>It_8M!f|9yTn=6Aar8<0BUeE
zq%D_1bPh#gSPrDOx}n{|4VSSxnuVlc8jD+|O8zFZg(^peBz*vj{c0(aG4?==Uf!mi
zM}>vOATr?b0R18|@qO+;F<v<5Qx<Ndh;rsfZOAnQH`pw*w>M_yn-Z?_%_mVE!-7$p
z%!+wKG>SYEDw57U4IEd_eVrx+1C&W6$niP2FB_W2;Lu`lEgM`df`<%vq+q`_l68Ki
z_*F`e5fEc5D2dr_>VzMAy{Q=_#cAP@)Aw*F<w4f5mQ_Kk6ZHY%R<2CbO{N<Tdni4-
znn8IYz!4M?FLska1p~GgX(aqu(}J$JoURHU4#u1bplkd;R-*Q_uBqQzp9`Kyr55Q&
z5&~abyb3a)iczLUCcxf`DUwo8jmWs)wJss0G6fl$>y!)cVMaBK<u)ZiwX~vdq)Zb1
z?$#7}mS9idm#)}&zpK#ZS=;nWP~^m}e-^zBm29AW!}d6$H}awZ_v^BY)5cC6&c%+O
ziq;$|Vh||bi3gK>ikT-i-420|r!{abR<=`Xo9<fQfbyu^u<0p#Tv+W++1p!;+h+TQ
z)zb?;W+&+vdJUkq)s8BnKsAZR@sq%6!!Cd|i^enzzMD76%E;p9{5zWW;sG-B*zSp+
zbfp9W^8Wy(J6bU-Nz#K}%c&GKiwS~?*l_$aw(n}gOO{bG*@%98h~Q9*HIBfY3g5S#
zM6Zm?a)}UguJ$gqfWyl#Wm^Mb_|eVKh1+0<#Nbrw*36-VYPy9_UTLI^%_PfoP!NuH
z0QafN#Xc{0T-sz$t5ybVZX{;0=Pmi{1tLgYBt$W~#%-mw0fD;H1TBY#PMTfLk7{i?
zaOnR4;$y8VURmGXe<TgLqShfr=ER=vXs9V3@!<U5yVQp?P&e;!Prw6&rU+dZXxaV9
zm$IO*XTy?5;4FH`)q_AFPBR|_OHQ8YL)9~vxp3c7iYvXGs;+N=ZMg$_#o<c=-tqu^
zK-AH)NA?h%Tjgm~MCV4ka+ln9r-<cc?!!QQ=(cMeikf}dK{w=RD-M~aa@m*e?L~{}
zzV#RjmiZBY+dZ{46ne&_K^jN(oD+LfHHIydz=!@y9)8<UMto3(%A(~SBP6@Es}qQc
z<y2zIE(_^I=npoieWU|OPVHiWZOviCF(hgUEtvxu7!6J6ViVq0Q{%d6n0eB{34q^3
zj}a$~uWR#3DxhW{cz_YuUuC$tCZ<-ImNs0`w{-GTLSO9u(!$(`?sQ{qs9_Qu9u+Rg
zf-*-@j~mytu&AaLDi#6;T(O!$Bbqmj9mamaxv82)!poZZ8dVXKri9wC@eEER_nJ?1
zA4*o}z))sojA&U!K?ueBOB?aM^~%l58jf6;Yz!Jrj+2bWq)Wl<d<B;h>BCPi6vFA4
zvq|b5$R@Dmj7Z?CYBfWC^q8oz5r@z}flXpCt%q-+XN)7DL#tQ(>_X-ra%QGCaRfw?
zf0^rpJf`1*<)O1ADi7oG9jNF<d?&d5j7zdYKC>vzY93%-nQfZnvYz6aLmPQ0<bO3`
z((seKkq_#WIc+IdJ{eWRxRrLW6cnRI*C`^l>ei#PE*9UM#++HAX$70etRj%KO%?SH
zgY>74_F$~)M&ReZqKE`400zF6tXtZ3U7?u%iuH={H)MVqj{PPN_}Zs|kyEJ}__%FO
z>S`9cJ0VLSBe4{I1(1RGB_EB~FXq+WNkROU^~yj5OG~rNOvl&9M3<idg((Y4e#4P*
z=9Gl7!Qdk@Ysr>Zwq~L(*o<M#JD%#JQ%>Qrc<e@vAYDdo$TthQHHkfZNwt|_P8y-X
z4yAx5*DSyd!K^MBW5dCk&iB}xa@~b>TKWC$2nvI<YgTC_($;$$Yt3QjXOelO$cRC>
zzU0;+Rbh1n#(U*C^aVxq7pSnOSWkq>A>ys#pA_VvKVbzY_+p58D5lbHXgc`Y`8Y+S
zecn&(vCY0xbuztREX=K-X>VxZQO322mEyvA$lm;e$!pr2av)Rx0Ib#ibBptp#g%`;
zC=DXi0DSwODoL5)j!zYo><FnvqJagApx_P`kpd;fmdZ3m9G{j2Av3j=0Y8wUMWj{?
z0Xu3aT!ulenv<nl;a?dQBKR0F3|LTcX-4Qz4eP<FAdO=ZA?jUP?a?3`F{pi+ByqvC
z?JS9q^?4+>CZ&QrDQFbvs<(2XekQ4K{{TVNR#pUF`F!gR;jqX({E+BW(u=DT@o{RG
z8nZArTb!U>NaR)sm@x~)&?&k<s1%MRay*5AH>@qAbq)Z?Ny>m78vUw9Q6e(3&ax6j
znU4W@tX?IA6R^8ShFuF0=4tWC9DW6B!tNJFtV%wq7?xLcdu3XU$i~Mi*r^GxSU9PT
z%fbP>jW3eDoGz_mqG=bJ#OIgL9|8)R>xILn$nT}zr=P3sOiJwX4M_e}uVVp)_CyEV
zl6|_B?Eq&IP6H+i1N>G~@t=fIixM$2z1nj!AERK~t@r|x0@I(20&g0>+O=V{#Y7ck
zu=?qk8rTM{O}??BHwRkZ$lGJ(@{K`IP0u4ra7sUWZ>2S?1zyFD>*UqtS$rb;n!+$h
zO8hRqBE!z~6fPnc-#Fz*D%HS>A_wC3sNg9QX3orWUhHY!(Ge#|h69G;ismsOmUp+S
z(+%ESihkq^Q(jyohp;-S^ICzGadCP70HapA1A0u5;}^I(Bh>b5%KaiA>&6<m4JiZi
zQ&YxK%Fbky?hX(GLBZ;}{Tlg}6{|@h7A)<%ACbNXP=6y${{RBZ`B!O0kK!#|(ZT&~
zUF~uCU*(!b7^u}$=O<38TpX`X12Jq#nnt+fBGNbZJOXZChkIXIY2ud|HM5NzWW#_z
z5-IMIENGF3Byd~A#8w^LE3)dk5vbsbo5W^v$e@w%?Wm}jGxfA(3TzLD@U<3MWy8gn
zF_A@-+4o&*M|?&pfC$`>qM&toNLG=gVZg`;({g*)a=j#{j5@9E<r_=+15wA*#5li6
zOAp+j9`jLRkwzCQA?5GGR1&<n+)ols{8>+u>?_%ETQ|ZYPwMr81Em*s+9-ufE#5=`
z*`HMv)E#>^NTC4uvgOsyJjN%5g_<{^Yo2U20)~j3BK99HD4v|8*?N&16eojCc4DM3
zQNr9&M~*UfX127WV?gE>(!_EqWytE@<f5i~LjGsqZ#q{!d`6#1HNPM|)vPliB_;;b
z0pkmpg3D26cAV<!6qP5%qSTY+l12muQ}NoImUw{z%y~k8H8keu=$n1CwFJu}$_gdD
z4yL9z5-)_H<kYs2rMNc{*o)tq#Py_D!jQs8Hv`kTr6jyer87i>M2v6&;-$o;<O}0Y
zh`A_t8&v3+QzY-6Se|t*t6x6pB2Ev{K#gKj#2R^-aLtGr0986LFGAgPfPD@bIoFpv
z3W#-avV0K4gFtFgk@2stCQx`!s10Ld0~G72!$SJ>!TRq)C&%K)lah7+00Pm(qT%q|
zNhF#@8T$&Nf+NWkAfm*Nwp_LVQ)?viIq~_ko$B5&rE<C*#g^vYW`VrWZesHt(wGC7
zjaL3%epF7#q>X(C=drJ>>=uCvq#YXj5l}g3<ZVQueek|$YqE<9-5ct#*wk_qbth)+
zOhU?pa(j7-906ZgDg3BN<&^FTI@R1w6f%gykaS8zsl>RQ{cOdkDd;jNUYqcAtQ__u
zm2@<RES)y9M<Dl?%}r)z^vrH*5M{xP;K|iq0PNHdtjS_xWIQ>e{2U}o@917iO+(J+
zTOQyygnq}7qr(729!y{##8+gUz^>hT9i&&UJE^PuM>-l&tHys(@e1TI$oB3uH>139
zU-M_A)+xglbZ+|SX_S`6#~J!$JV%!2UPVYHQ=S<XLL?SCk|`s$9&$Q}qzwa({f!h=
zl#SWJvpBb{LgmD#MNGOJoUzuhaP=hnE~}^BDdY<hmLLNDb%tD+iSw~CNxPGCV5>ob
z85M2SVbAi4>6vDobm^pi_+WN!)UmWuK`f7B8fv;FiMIoquo!NtgmR?nB8hZG^RH^@
zhl_WH7WmI*ek&M2_Jqsu@*q>#d}f4z;+=nsKR5D9!Z8v{u$vHcXY?Bip3-9FQJBUQ
zT!ghrk>Qapqz5(^98wmM%AX3`lBxyGBY1+{SOVEWvs5mc{{T7C-z>{#jev9~zE%WZ
z&W8R}xP_7@xBw1R(UVC+fZ!9g#^RNHO#bs8`Ki$j)l21Lx|>slGQ=3haQu%LzmLmd
zSw-;JmJm)4-=U~mFvLlTjT10pd+SWa%B98_HOpOz)yO8jp({$v(X56HKMJaJ1<e}+
zBnqfx&F+T@rNwSGSNrOCuCXp(8jU^jYv9)pC<Dy7t7Y&aFOQtvGE{{$PPb8^qDe#X
zM&prC9c7iwcRUraCXO&p^MK(&RJxGP1?ws_=@Vs@B~`X`?g-F|AHph8zac{AOmxGi
z9DUrDtVDp~@nd{LkA;4~<kgz)gEV-4`8a14AxUMQT`q4UN>~dJE9N+eVE#zrD76Q)
z@Y0KYr78^w!BkZ)g_lJxsy3z{$CP2>L*xb8q4CRt!y~HXQLEhQ<Wqo3D6**Se$_65
zIGW&J<6%*+N^~16s6R%bx!4-Q#O#kF1Xk1CB>rA?1fodf9mcn-S&DUK1-z97H<Dq0
zH@ns+6LU0f&SIIkkhs-emJE?IfJe?j%*#gCkz>2Bs1+n?);wHZu}lQE{uHOblT_p;
zDF@`^&1si9N-bipFK~Mr<wUB-@LSMB7Aio66~Ol@Py^U218*h<n|Y_1qKEDRfYv4O
z$4Q`6Kmen#y?F}$Q(Kde*COAvHY#iDiX&0IDY=h>=}~*j?z$hWzEs*KC=Cx~lyH3L
zd``hZ^d_uKO$y(p{4jG(8$HVa11LTl08VD&q}EH=eHl<}2M%eI=$wm?xA#w)(gf+m
z&v>-i*l(fZy<&4rA}gaY(My`eDT~?h5%sibtyt(YVxO4fZ-9BXHHnnDg}xO7!a!RZ
zhsTJ(A~aX&jYGFBY7z$;hKvpX<euWEV9;Sb<&5z1`fw{0HGRezTR;ce>?;_yV|$z|
zZ~p+?YR1RoZ;A+8^k$_cFma#a%04gUP0d0}7QKtRap!uGv;%>_6vM$1YbLZ>>kaR>
z`ct~gjG1*(>!QZJ!u+^ktuNMK$7QDq?C<X|PEGU_<P^o>v|tFS6iEcUNQYxq%A~Gm
ztYJocI+i8W5-#SX)f*DtH}g~)(Eb~%Mp*e?kr8@Wj}_gH>&1;>!j*#B7d+dLDM)PA
zRb_4&NZ8UmY-S7Nkx=GE90n(ILUmw(pAwUE_m1YU!PFz@A3I#!4S?WNAXPvvSg6&F
zfEPU1Nk#XuUHuK{4awfslK0pF+SN2|;hEh9u0{MD*mFV{m7YKm0gYH&&wc94l1MRu
z3S}0sQ>A!viIz822a@-$AdL7v<X?KHb&gy`uZeUze}q;fvWQ@fo>En<(-#&b?{QLl
z?L4X_e<$45R$D_JZ68Cc)+Y>)gp}!Z5@_emd8}$C7)nltWH(nnOi2~)v~1Z&sIa*;
zYa62<=}fusk{f{-Z{aa+6z%0pAxjNOHHnA^hY|}r+f{IjL}(WY7$1oxsou$pc?__(
zp*ks~3P!i^u(+%|VhPeE3z5Ll!1JVL0%v6a_(#Gma8AahLXL-KQ%d4&Ecfv`6Lo)4
zP+2iSoFFa3>%&m^A-u=`00m-UXqs8<yYi?gR>=aEa6J@P*PMt&1-eA2#S3;WX=P{x
zbEqLEy?|iVsIplXPARn2fT+m@n1G5qmO4`S7~zLsDc;Oi!VM~bR!PuEPx8l^sVoL2
zb0Ze-Wbn~lbSZi=ygW!QyXn2CU%-+8<JAte%CeRHYW|cCzqKBzD)Z#kYZX51gUX+D
zVVUCdT6VlmEWbx?)=N_@h)9)Bs9~ry<n*RC1$oH*jd5!cRyKBE%%9LwTcv}HmW&a%
zQTYR~saDuL5ZMO=jsUDiA}Ky_`7(t~N-ksg3XWK%hEjid86knwL8USzT_rZosrCDt
zn)pJ3NU4pwg>K}UlxNq(m{8vncao<h;NX2rzcRns6l5(lr*~tmm$|Gu^x%znA5}oz
zk2MB}r`{*}wQbjM3tRMBe|eY3lkeoyX*|1^KUV($SN0^t$t;4~<+7-~U}As_G;UBc
z&8c@Ifmp9*z9uN8C5%$W*6`o!Qeq`W7e3~OvzCeDkQWL?vK8Fc0Tpo3KDRqYhMeZ{
zBN32mWwy!%W(n4Sx=91Kx?Dd8y?Y*IXlLc&V{00gFQv~LWY2x`4h;k$p-_6Do;W1a
zvZOICqyeIjGg(7OfR2<bbqnTcv@t9>YY60Guug9zEW72ec#VQHZ*Q|)-;47>SP}+Q
z3e><}S$0bcT~ydy3PsgOFViE73n{DFx>!PgHQ3NVsT8t>`^a0<fE%F?VPF9?Vlu&r
zdwwl`RMrvI`iO!xGO4}7u7FhWtB|KvaibyhG<N`AqF~Sv$i7Ss&cswwm6~?m>$)K2
zsZb~^bGfj!*w<mHplu^cfW)87d-+r9WDBBq>4SWqE9lX<42(R%rCl)6HR6<ZQ}EET
zVzAGrQZFynO?iZcYlm`XYRi>btOBj?l|Zlpqe9N<3o?Zjh<vK@5)f!jIJm>WnG1So
z>}q(fld*of`HcG-g!JaH{q7oHjVa*|0qVC;T~)x^xfL_47|-Xof$I*TQxd3L;uFj$
zH*r_uI56q>lqQk$AZeaf`|}XA!qP4nIRp=_mr4?3e87UF8yv%ZE2Jb;jg}OWn|3H9
zksGmRxu(WXCYpVk&0Pj)zL|(zrFd(OYdKQtixlcSis;m%#|Z&sPv%-uM!IcXsQ$p!
zBpa!tq;v4zMw?l1{{Rd5uV$qLx>%P>ZY{kyD(RCXZRAVQk+P`qC`;%szLoVtGg1CL
ztDVoF*i##{l4{1gu~^Vo5I_v_R|S(V<S1^e*K_CvF!AGOH()u-eFbK{*!=)*?00%=
z0FkbM4VO)nb`*o?u&pS9Fh18bnni}fMph{Q0LFhaTSb9~#Hs295p}~L2N5X#LH%gx
z=J}?V`QQ2v*^W~zBkSfCWv-BhXIR6>BCgrg^H_yclM^O~AlBRkQCNG2x4P_2+SGOV
zy2L||Amf^Y5rxEC>;hEO&<_&=RFa`en{8sXi&TxmHgtj%AeUzEQ)R=#pb}ZL>;U8e
zQQ^;47yax?4s%TiTviI;NRAXKD}BMNJTqbzGr<}GSa|xVhmygZnj-KQV2LJuKqj%0
zHg-)?RhE|!$}VgzdJf4l#`(ZDxMe+!OJ*U-36*^=Mb9Ro!u3<6M~vsOsDkKx&8gkz
z!#3H^#*`ZDI3whW?}vWP%K9}UkihS8z3O-CM}}<*j$HQ5KxrlQY9{x&4~X&|m(Gzw
zs9Oa=*i*Lz+?w4mx~#JKztmbqvP6I=1IT=r?|acYHBI8l$|yG1wGF|opv4c~MBTxp
z-64lk4$KQ0!s3)ph)VTh-s*cY)0o}oDV>rB-d#fy7m-UNs3<I@LGZHgp<5cpN!3P8
zIyjWnflyg70W@Tji4)1U6ac#sYx(I=P9n%07kFNQz8o1c7>V3-b*>7bmA@CDZitG^
zihU3T72gp4FY=}8H&XdE&lx`SWbbjcOo7fT6M2fE8ach{z=0itYuhbI%N95eA7qx8
z-Z?igG5-M3Qfgi%QX2f5QCWfhWtD?gYMa>dN<CIU-=Lz`sIbMOaiLS0Kq91#x@2h_
z?4J60I?|oHP&(21O)%6^Hc5AAyq~(!8;^Czoo|W5#NifW^{bNci5u@Pb58e3C53au
zPr&34z}MKY{RMW7S&eo?Dh(gw<K<9&d}LQRUu8g8A1vMxTw?vJIA6Re%R_8F3NR!4
znX8HMZ*lA5$}9f>>)?Q9^zc^wd{g9KQ(WOapW{A^`Yjy{<n?g}{B5`0Om57^<exHs
zXlzFYihvBN4T9CJ(}-nTQ<N=rDsmIJy*x#*D-1!5!Pd&%Q_7ljG0zRIB#pOIL9TE(
zmb0gH^AyjXQ4t+RA5}oFW)fqN8##Vl_iD=^#D-<mG7zf26I|9C5g%SxBwjn+kbT;k
zmo^zxXp0MYR;NOMgSuYh%QDn%@&tkvK*jgHU@+w{s^;a07F7q6O7<v*&d)BjiiF7w
zf;{=aQUq)`AewnvIk4w&Eu$?*VJswNEfemdvG_C5m-)rfs|h~iMvhp`1+%)!5+*gq
zL^3zx^mmP4BK`?#TRs{IcXPy#NKO9TC7Tb1eGG$!VZu`ANEQ|ysJDv|CxRvW`TMAC
zh?D>j{{YHPE4leOu%Wp+0KMt2{jzHWUpP^{@8&e?VLlyS5e&p~;V#J4!^}uO<rFxK
z2#`_+3uo#9eZd4&5g6s^wn-f~Ukh?5IczgxMnIXp=$|zp3bEl(%V0PeG^ccNh@6Ee
zP~PaPQb&>5E#h75Lsw^+t@u+d%(%G%A5x;`l<K%(B1)fJG_R=)yT<hhSg{bnWD&UK
zJ0sLnIwMR$X%HU^8xvSCWWyd@ZqZclxxe;l56Aqc;-y_9iNlaQmOIp-!8R&U(*&Ju
z5IU9=KjY6hbN8vWDYN96n<+lGxHQvsq0Ye_1CJ7eu?Cs6R$720W-T%dIbM?n`&K25
z1|h0k6skPiLcf@%WGZ2D&xVl?f>7R7hjRus5N|3AhhHZK;=5PtYy6ylPt;c9<YA~Z
zP2L_;%`4$yxHZEKjYtZWl#H?tM!VF;@idYc`hC*paoE?_VkLjh_5T110~SGB^}V5q
zV4rvvu3^B()SK^R1lQJUq8j2!?KJ-Yb@Lkk0O&*a2CuJ>ODE#h*_*@nDAW73l}xHP
zDh)!6UHqH^7MZLgl|-u<I|F@E^bd_u-zog=Dqvj5&v|mM#8~K}u=Y$$(9hKw?Z~CP
zk(-5fFQX{F&B&o4VFX7kapu;{`>{Qiu`CUlZ!3lW0EK;lt`=kjej?OX(a251DD2$P
z0hL+2G>Baw3UmwDX>(YB6ssXj<8^AoE=Z28B+bZ-9ax%O4nG&;W9Ca}D=cB;goaHQ
zU{|#*=E8oil{f<wiNmPT>k5d@h@qr##@bNl5as^>Az@Mb{Wz5~+u_h`IisSadb65R
z8ay`fM0hRr-iGA=08>L?`k?e$T^YU<@&mmw)r}Fb7p~4(C~q860?+rgfTbfQ6&a=5
znOeg+pgqy_Y58khh|~-E*K_h;y?Gk8?w~mIHMzh{)_?w6)NwJ!!*L%;)89r=rKmF~
zmlYOwa+)9BmLjKcv&5T0Dg6=a4<E<8@NnL2l+xyfLXc1qs3*+$s!@2P+{G&Dt|}QG
z3{*L<9LkMixBS%6T|=@)0j>yBGyX46BOI|Ib|jw5L4apDd>8HkBvv08F_{6>34)Yw
zO$e^%YKl0c2k~?I)36p}?%$C`fKp9}ZY*>l(NY_k0-X)V#5~0)7A$Sl09ZBqo_y$l
zdSl=_*ENe%9D{=UqZ|Gd7?XYl2GDwc`mfXqu^{=2nj3xB1N0Te50L)y9hOh@G(Gs+
zMpIAtso|9HMQ$Zu-beiFOKZtAjLv-Q)%7rVZD^n3xP=WJns26*`U83j4oGbRS%;NJ
z6EaRDW_M-!_wPk~EL}o_=m+=Ui}xXQ3Qu87tDUEOixWBUfoql~q>f3tL^>%|AQcsg
zg;C>7N}Q!l!!4AW5xdETI<x~gQFi9yqKTeBJ|H-)kqGdp^rjZJQEHeoL4A61F1k>G
zW00!&SVz0YEw`rC8D=xQBu1HgI}mFPf15xwY*Q0(sy?j|Z)E!w4ojfryCpEb8`+q2
zIr4B8CD?hj2D?j%bOFbb3W7lBe8(P!u~=eI{ZiuJk*qw879u0@uFi&~i6zcHtBZvm
zW{_Ec+fF?NDw50q8V=^7ZTV_ZU<Dl|kbE9P&bVgxo6uJz>QAr9!tPI?udMo?z*mxi
z^7)$X1rwt;fqaF{X0^aHrofPB5NXr{CoH|3d_tW^NM_88s5U}%xEvj7Xo^b|vH;Aj
z*>|iqCC(aqSh9jZEDv$Gu3sa`PoRPyqgL|E6%(YGk|1Bfsu;_REJ)`#8-;UI43Rvi
z!4#zE&M0)uX$&DuqV|<8yGWzNqne%~u8cHvai}7tyJ20nk}hI@HK1)g5i)$@7xPB2
zkxve^(v}{a0(*g7#T|FkO)IfFucdF94oN=o%?*~~C;arT9h7AJQ#C_6%{f$JZ62X+
zc_x^%BA(Z;Pmo&Gf6H&#Uv@>KqQ1!|r=Q3*Xc!KZzMLymX3rN)M#8tbB$`8TA8YVU
zIlDDp<!)_%PxldO5OkAW5ed0bPWcNC38ulgRNDPfYg=7SPk?fS00U)h^rAEzj^NO2
z!j?kA>V*K@)@PARs=rK=x`w^8QX9dBHdBakunIR?8hb0*ce42sDpI2j6MpU<#IMv&
z2PUxqzEIyv<GV4@5~J13uGoWOd?#B2dVdfLu)hMMJ!pTGv|&#YJ~DpHG_rSg6o?We
zUI%|NXzIqJf2Ndw5RZjvMSv9AJCEUt-se?cm%iq^lXLqU6R@GXHj2M_s0iy%C@T`1
zUh0F!{{V2OQm$k`RD-w+uoa13rVTL)Cknj9ch|v4e}b)PeAElr(`=ZuF@AJ;5`w>t
z=_W=qz~qR6eWA@wn1dsQ(M8EDX@PNu!Nk)_>a{dp3{y<(>wTP75=Mq}x9=f-Q2C8k
zoo^-;B<PvY@~^~*cr>eKH@P-C6ZWmWVr8}}A+%FJBgyIn0}qSHWX^+RdvYtu1WWk6
zML$wC7kNus+PR>>tjdNkr^(vX2ZDIzQ;8qWqeq}}g1k35fw5CU%X=GWDA3xztLt6Y
zQC*l?t)Ux=4dEbF{!O?2qrt8tW8+`tYQH)kyl`j>B+KEIJs4LJPvC#^3LD6))KBvz
z{{Y=Su^Q4zckf~>O)3-*yo7K7JkmYXZ~)-bYa|S8LHi``D!`oH6#)5~kY#xn+(qS7
z^GRlh41N4d@St#%ntM0d<MObjbrIpm3AhTqsx*lqU*~Y3H{E)f0Ai=Yii{3VN+U2`
ztcawK^{9#~f<?h$SaQO7_-l)F)4Ng&0Zp*sMIp5F4d3h~D6j*HZ{ExB!kx+b$BH_<
zhjumj3h(Rt8vKM@w_)dcAZNtPq^bV^yG;r8HG-X8A|41{E()N~U1{SQyo$09vcr3d
z977QU@q1J=nGlxGF(g{8dz8!h8pKP}X^Q5`PQu5z(xmq~(*%u(;>nhs3bZQ{s37P=
z4r$-#7zw#Tr&#?`u;$VjUee*_BX#bLK$67#Om$}a&b139K?$?Z6Cc$oZC?%=#b4{C
zeR<r=`7NsVTs|5iA_vhc{&VMl@}+XAXcC9<3iTxa05jbDq*%zdxgDGvh8{+rMVcd-
zLHlSf$@q~^s!s_ltUXrZw6*#9e7|IEKz`S1`ol&Q+-U1Vb=imA@^OiULYw`y*{F-f
zD(aG_bwBQrma`xmF};l)6FCTnOIfK6i7Sy=d$swYpi7dL9%hH`urc_RPuieAvHLxC
zP&}wbonseY1?&|&3QLZnTo6ZMccpUvPC)Rryn&#k>&9J0HJ8LR2FGegV=Vsw6sGqm
zl@jGh&{!y?Hv*NdJma3|l%mQ7Fx9@G@9S5&Jh4BiuKxfb-{m5%bQKk^BV3YrMP1pA
z5FH_AvwF(Bzm~$gfDwNeq=ZDOq_HXqH)CDV3x0JB>+_fa$mK!RYIF@8(8sG^&wGjr
zGZJ;Ia}sT`Pspec2MxUOuF|jD6sx?_g*tyRxvc2$OBz`sb>}-!1zlKOBtyEm<Wc?>
z1}um1Kw6)9v9jcE&hK2uhCqYydLJGnnUCP~HbhXX_z#!<V}+s2X=VIgxOY89qwt2x
zzk=7;Qq<o3GajUG{LzXec<+2WA0pbNHljr#ko=s{{hhb2`s@A24!#zlu_EX372H<w
z$UXR<hFWH{IHVs&{{ZOTU+!S)JgKeVz3rtk-D7J=0Q7Kc;yHvdpzg$4iLsr9#$)vd
zH8SSJ%D~<}I$#}$uX0u-k~s`~jb<)LbE|T4&|pFn<LUdLk-eyoq+Wd~8u{Bt#1Zfh
zF6N_9sE9182LKO|O{c_;e!_YA(hC7xT<&O)OEnMJzLYPaHQxG)RV?koDvOeQfT#vc
zEJ~%0UR;6kH6My%Bd$^uzvlElIoqlEZ9`>IU_RkkWcqa*yd$4fsoOR8=t;|Ysjd<T
z&+7IR?2Vn=$tWmp2(^H(fJ7L--IH27&5L0d{d(6i;Zpwqo6z|2QW-xj7KgzK1YgSE
zFD)YkAB#}<FzRHk9(VqUN8o^Tg%i6H%xL^_4x0WgT%<}|{w+(yjnzNoO)G-djR&HN
z?GgZg6M84&V(e;QZ3L^E4#xH>exauLB-R-ZWPJzRY-@&HjSt%ApO)V*d;ZjmXN}Y{
zu=57DI60g0jp=tu6si9Jay$V;UWy%k3vp5DrlrrB?MeZ{!?9*N7OX}k<Np8>08JpY
zayYzhzfw;w#<%KW=0d0OwKQ!TMywsmww5-~T93I9B^wj|iAbSUR9FBs01uH(q?Bl6
z?y2QUEC8ZBF%8eJVL)90?b%j__te*KlzgA16H}-z4xq*kfR8g>lvsXWus3I5qwzGq
z1S@ntMU6bHawdr#&GOx?psrOfGu5+0C>9dNc41hV3*n~#26yHsKd?8A4^{sF1if(b
zkqXynQt$p}u3A?ve>(pFmW72M_^u0n33}{ULci6GeQ4tg{{W5kudHt?{&p0864qb2
zR>Fy}R1})LLGw6Ky8+FsKTNz<1UGOF;*vcX!bILJHg^2MsR-(+X!5Wg=mBr*dL-rm
z+z@DxtA?Lp{EfJ&ZV_<=bX~Tx$~30g(1r$uU-tN;<}1s6JgAdn`+Nr)ubQ33Z}VCA
z^jD$q$hN<yfA<C=<e*|l-$m64T>)0)Rs1a|83Fq=(wqIloZX@%i#OIo!&fl6>;7fl
ziPs|LHva$-tr{FO<O4UGpxI~u02%-V07)l6EAV;0(P>72XaE!qpAvo5{#x9-YH#I3
zU=Qq?_4yh_1D(wubaqjo{Hw8GPv9%KP^0svHc-x3ljIarY9N6JT#qu>%R}SD6N!|c
z@!o}kf`OQmpaE96PJ+uY9%N{=g60A&#0~mnldqAe6R(7BTausR6r>PFgb_+|7mbw`
zTMZqn@0sZQImlnZY$)uiE>GMj{Bxd=u2vM&{Lf3lClcR)@X*mrtPp>ZDDIFBpXaHj
z^>!wrP|ULU4qjTvfz2?>hnf{VGU|L*X5Q6;lJPIrF#zmItwS=4<qtwO=#?Yq22C>G
zklW_sf!F{Pl6#w8q>QKy;A81xL8ejwSmRc)-^Lk$6=wHOJ%u6x_l<41JD%XyP$$A-
zh2od-u~KMn?AgeYCjS7s&qGHLcpM+(lCA#$yW&SeU&2dXkHn)je<7}X2D^|!uTPV;
ztbR*aiW(ES{O|eRhONr$$rsbq8sy(kyz%$j_Rqm0h84yha$P>>tLW!g+tJ2{`}@+Z
zt~nI|VSe}9@T`X*j160hlTG}5N71L<$)wc_EuxI~Rrv?PIQ5`IM~B<*llm<klx}N&
zik<%enDanzKWI@De=m_N!jztwj5DEM@X_U?F^|RVT*nvEy#f2_4^m@S<8xkgjvISz
zOS!XJq9DA45D;H_Lc%x6o>B`EE?S|S86X2$1eazj=jA|~-WE}RR<&}g^shsHw81|F
zN*u=!h#yvcYsq?#__cO-)BK}K9hB5$m%@=}C_W@RH<+aG%92L%BU|E9yB{N1NZX^B
zYQ=RdPjgegl1$$nxhK70u^BMYt9azr<73G+gNY>Q6el@$2ybF56w*Z;Vb4lpHQ3Y6
z>|s%18NRALDm969_z^&F2W!+)t07Tq2GG;pLYs|7qf%{SQ43}g3*PyOPyjmG)Esz%
z9~ND*jt4ZN%CZ~0f5`ifO{oRiHoDIT;i&Z*Qjc-$xR{5N4IEJZ6WwQv`3~ZSuZLNl
z3`Bo&9~Y>h{0vhoA4PH~ZVIJ&Wfj^)M-|J(cx0#B4~hW^J(TQg;o8Qx92)Ox&2UA{
zd!pMP>OSk&1Zsr&THk=N@~hiZeR~7_4zxHs{?m&xI)+vrVAo~w!hKSQ@!-6P_wv8r
zvjD0E$tOSsFbqS0$p?~-Tjb$JrjG-Eyw>BDPftHO?_JOA^M8=(N8~5uA19?A6xdPu
zEKPx}z_B8L7sKGe#I|p?-~>ujc<}lBDds}lvryd>^kSsi94cn69(TXwlz)d8(J$p!
zv16{Zy4dm#po+0)E2*%k&>5z0bphkdnuV9I5+RCJR@tn;U27WAJVq0BhC$*MZ8a;s
zAhgOf6R-4YkldgoDe__Ug&*D6k+&LBVS~cVrby0hJY3&R>j8z0rI!$ypBE-ufCtp6
zB8L)~VGNT?32~gN<*=|jRx%9HK0vK<w#-_gRz_`^($-(SYp57JvWU920dy@>%&iV7
zSURV5y4IjDHw03EFPy4?yq?t~v$stx5N0>r@l!=HSrbx{!>L_3BB3JKsL-TtNCxsC
z_fMM97mF1Yj&D1S98f+CTqmEkZH;k@j12z(;~y0b1k1;f<bCzqpV-*praGwq0G9i$
zDt$H;^qMd5@+cAj6~!L)ln(iT<6GbJqsHO9tbaj&O6*RS9ER8Wk4oq3edAk?F?#Mb
z6~X<Zy!d~kf4_rVUJvgWfS?PKPXG#CaM)A)FSh>xZ{#A0xkWdx%=(|(zZ%yk<UhA+
zJ*!{^F}6t5yZ#G9Uz;HhFRSa8G3L~E!mE^w{{T7Bq(7A|$rNH3>w}cY--}mgZx7ry
zrnpmW30+8_<r>1}O|B226bDixe+D8x>E<Xc=YVOPeRT5_Mocy+i)CTFa@RyF1~w|d
z>rvui#G=~y(KM`5ED%O~+V%kODkqIX_Q;2|8IneoK{+z<r>!Xi7YgnU-9)BSkmmSY
z+%lR--z06PQakZp&RAoB%8aaY9HCm<fkIRg9-WeCz|clGB9?0_vt86F(29IY2UD{S
z)cDCF$m7Etags71*jQJzgTX8k0m_oHT9Q@)hK`J;#DX|9$$4RB3g8WGt+P~k#`)j!
zFwnIOYfTHIlx5Q?%2$S>xpT%d73@xJ{LNyMs}i-EDWkoE<=ssY;=)R9AITW#-iCqk
zM!<yp4%NurSbl_8m+qMV0O|dh&C*0RVOu6NDCs%-W8gGJ!Ch2?u?LYu%k~b|Ai9(1
zZx`WK1V}d|_Zr{xqAneEQ|ngykNb!=lMwnuo~Es?DaPJWufzL4m&@9LtABXi=zG&l
z!4yy$GckrQ{{S}og$<yK`z{~wPZNFSxQ`5>KRxS~b}WAr@;Ls^{{R7hs{XW|3}gpZ
zg@&C}C*kj1LE{@Mol-&eTVq;9C_4s2c-Z+7rRp><3@I4Pn$}FOzHmmCq$4a={qyob
z^xm<GQyC8C33!o3V57`=Tvi*09muSiqmZ#sLF~)Nl>}mnw{xJ^ElDJCMXsn>wI|He
zxr+@PDlH=*yF7=IO<=K$hs2c`QxP14Lcnuama?}vX-??hV9<$I4`#nflWSk$tRjX4
zrhr(S%|Qr^Hj$=n>;*}8NEJ&wmlh0dvI@iE75bMpV5a^mnS_(zaaI{6<&e-u7<eN&
zf-`BD)7^n1-nrl8ws%&zInMeDunH}00QnU{t;se~!0bLjqCM>_f6CmCBV60wPv#q~
za);g(^&5{vxUOPve0q2Nlc9l+jv#r6(>2&^@i*0xcNKq=^{?ipU`vncHb1R1TRQ3q
z^9I_VJ0DuTfNfBp=xedqp1_Zj*4D3Ilh^x~Hbg}%%zFSUae_my{{S(nF=UMtDyZ@U
z_WOK??i7E!K2^AfR+YUGXl;nZ0PX4!Xe*1Iy*pDIcO;raVjDw8Rfz!WNIZeqd75$+
zRIz(`v2E+!>U4mJ5x@hAL%8R$6@^PmyZq)6+;T@W_gG2(8y#8)^5soIc=JA?m+C)t
z?0BbQjE3alrR+S96pv<MuT8jd<awk)^Z1lqa_yhc-r&;SZ)eJO`*63B6*Czy%72F^
z#|fvAq6{~NL^m0~8j59XOhfo`Dfh?OYFp+a9;e=fS6i(#vi|aCsm4r1UDxXmF+p#E
z#T})OgnIX6!xqb&4SYT702D@6#mC?A3NEHhG%>eQS4GIGjy6t6G_XXtlA9TV`2JX6
zSd~F1Md$m0$givi(J}KM4RGDZ$^QTlX#W6zdf|uYe_&|Cbanc!yov~O;aK=(^NEcv
zn_9=@^`Y9s{VU?|_(=59ik!;Ys}9=n_=@2Vh!OU8)A1BQIT-$GX>}pAVds8DD8HEd
zwD~{(0J}H$9O7jfALJXg5os|}Ya@T4{^Pgooz3WZ8uT^kUP*fL721!Lc6ml`@{6C!
zmyiSz{w;Q+rd&9)Tg}bdiMb@)pI?+4f;cn=l7-js+M|c(1WFs}VYTzCUdEO}tU%i^
zr-%ZDfmJ_Pf2Av=Y+sZbW;GMMkQQwj6N^?N%ZrQ?c;D+N>}Vlqn~Y36srze1GC2Ck
zHouzCTPZ)pPTsVtRwf3)<2%Cr$7|EQ)wzOU&!MJe6M$?{#?vRQBz`sH6AAc-+7yU-
zE_TF6%uYFKceBU4K>q+x`F1t5ZIl%xYC$!fdS}a;CirQ&jr)2UfwHWi*~O@AF);}k
zef!gHB3!z5zW)H<eMaNcwQ{H4A1~$m3PDy=VhH3BS}b1B{RGzhnwS<x&2?c~>GJvM
zuY2iAK`PpUd-)$f&aId$ZclJY{K3DS2DZ97FdUsV^3lC$wSgMg{#yP9mr_UO8~sSG
z_x+~$SApD~1r0<4_bKbk&=v{>fCKh<KPQp?qK<>P@&bmNRlZL;xVqZl(*FSPu@D4j
zw2#5^6~e<9E&gY{e>H#2g&w?-*YtYxjo<ZZ{{WK$EgjU#LjD8$mKHJjZa_PM<y}(j
zd1Ki8qmXS(nPrMn8#jM;rF{5#xrRZ{^lFR$0D6dRApZc0mi+0B;+K>?jUc-y+Ex0?
z=Rkcj{bl;!>q@tXpN>9I`HByGEXVjy%x~mqxAv%4cx2*K@}i&GqZ%ynAL0)&Qr)6|
z)m!Zkl@`k9_=-4hF~Om@{{VR>#RDB<^N8_J*+F1?5o?ANyxX;3aYBU)k_{|&E{8J(
z-00e{><z^cm1jZWyKWsW3jQ_K)=k47GpF=5{OkQ!_PP;%wPW&F{)VspYySY<fBUYZ
zf7UCd{{W`C&Hn&XSIwgT0LiR^ul)seD>HtkvycAebzk*A?%y~crGK-R^flFL%~|FC
zwb!n=ul8M8{{T~8Jx|d7&Y$l#imd+tqgPP>0M=^tYP#3XtHu8SMSRY0)K!Il|HJ?^
z5dZ=L0s;X71p@>C2LJ;A009C30|XHgArm4o1rQW6K_fy@ATTpP6(lr6P*PzfL~;Mx
z00;pB0RadB{{U;hmvg`EZ@I_;68hNaZ|2s7AR96`S;h{={y=|gx!?X^kRfm2e3!0`
zmMZ)CACDtli(uNdh`QOc(aCIM!~s>dbWbhCjNQWCp&5Y$6i-kipK&`g&W^Tt!Y>t4
z5Lu$mr0N6d)Kk!m+<3)zB=Q6K8jMs!*ZyUjQ+wPzwqmz&m@dp>{{Wi#7z>CrPUT~f
zE@i;f>tOrIs?IM}fkOmz(Nv`z67B`8Q_9fU*5Pi%-(*C6Ea%j&^as9Fs61+AW+o@J
zY|yvxjJ;1`sI6+T@&<BZhVPQEYpW^qI=fimW`Q8HGq*@Ftv>sD$PZ)iUBt-Q3cwM$
z@ee7WivAtuILqbv=>GuWfSUe|OC>A4nOiY-40&&>LDG;HnueT}1X~n{Kau$BnBJqe
zlburPmFen>E4XrrX2%%z6AN@_E}&uo1h=&2c3^Kvg|!BR4-n|YJx0Ptx5#X^we-Mw
z644GrSXx!CEjP62c`JTV?76iSg`hO-ZYbJ7ioGqzbucblh-p#gcPw@Q1*rnV@)1@!
z>N9JoKk$0%<b%~NV48!o(=!v*a@y3&-+|aK6NzF-Rwt9Y7W++Au8X?k??;7|daFxA
zuO+#hSsiq2434Q<ped$chRyM`InnEIu+%0Noad`Tdgl9zdw{U^t@Q>)_Vj|FjId<U
z&&LxpBh36pHfJjxSmxu=z)_b^(^hSKiiJU!8I_kqN;L+NnNIZ`jh=*FhNkO_Ve$rt
zqYD!kvj7v=OpCO5t!hVY{{VvPj0DWf>`a<M<>lK$))(S-urvU(g0N9IBDYM_h}oBx
zMO{&Gu-K&R4G*<<I2Pbdfq~guHK7RMaVyK;$>b$i2LAvTc5izemu&|o01u}>yMhRH
zI+WAoCVe8xF=^v7@zpd}$NX?%7z5~tK?7UV`f}Gk(6y(>Rd_V>WH)2JFy@w`*<Y5t
zN*C$VV})SqyTy;Ca7!M31Fr42>FV4}`#FuX`AJnN_D!hwv6{iLNc@ofcYZ)sm7!kF
z`tHjGdM>$2SPzo-HS!J#>KhP4YkogbqKyyrwjhA|wKM+!>S&)4{{SXD_?Yg9KEd+Y
zGV3@lz^dB_En;1c0f<3RLHCYS6xajS4QT6ghAzW|bLj?L$zG*bvc8(fJj)HUHjyyE
z8?b;qn8JQSAn{ST&5WZoAk$@Jo1QEh*KdumN}cu%uKWp9*`~CXS5T{Rs`9QJ)}`fe
zTdmc3i7?+M>P2GZSLCx77OYU(wbfVGfKC2V-w>_!z$JHwn5bJ#WBCVhtt5nGHXArW
z)KRj=1mfI_GOFyHi(j;^n=L$rR0`+33<pBnQn576>a)y9{XO#BAH-D=NBU)gj?P{<
zgDQv$u<29?pq!l#5e>PVKjvwf<JUy^fd2pt=0X8G{DZE`o^~OcmId)P@kaz>0Y8@Z
z(QAcmrh7+0x^o=*wJZV0d{sG0aqhoFrAt`SyT)kEE3NEspnNi~%3<RyYN}zP*fbw&
z@WLqJWlvtVrYVR-dh55}D;mX&c=#g+WFli{S5<yDsQpFG<e(W;sH%&e?<(14kCCZk
z3RITo<g;yp1$0Yz+}b{ovnv#>tQOaBbZ-IcAyupg(^EMrr4$8eX#7TRIV&2V?gU-v
z0j3?oc0?qA+Vs{rGk2q7me}S`dS)ek>sJ2&QvUz|^;$2+-=oU9?L`iMMw|BjI~Kk-
z@`qlzl}(R*Ou1Dvy<BqZck$}%=Q{|Qmk(+$7mnR|fDe$OdigDgM94f{RdH;wnYZo+
zofY&+RqJP8wVz!=^A`-+>wN_sJDA6)&D_M|ZXANB(fM+m#0TZ^HeM<Q%vORU{{T8x
zT^y`J2EyOz;`CKtHzw;TuiCQ68ryNNxoBW3wOeF(jpvhn8X=SwHGmGo%LSZ{n1kZD
zGVdj#u0T~;U1RQRX}avBP<Yem9!-vME90RX+7Y(xCtbz$L8iLLHG{*P@tu`bUT2L<
zk5czKf&sHQg%JM$pvW9?BjM|={((o^b!@-oaLwr_C<`bhtm&c1s719}W)diU6bzyj
zD=|wg<c~Y+uQQMfS7K?5Wv;?(l~xpbN;nXa?<}{8(B^b@&D6xjHa{lVMcI2f_Zm4c
z%2#$M`CXNfb>2Fy7ps+h5fL)0sN68}eD!SnM0Tg-ATdlw)E$YLh7|G|tGF3!PH6f(
z9ERu4vyO(nfc7{#mRq5@jcav0%61EVyAA&UN@pb&T<wVMZEolH7_N6NP23p&0Fvoi
z-O0JB-0|<R#E5u=JiL{v5(dUJ1GN&z;ZwA%a76=bXIh-Q&;TIWX5acC1sjIOi(`Il
zP|F*t%*bE)oO3ct?DJ4K2p@9F`6m+i?OD?;dtn0j2FI_{If1w;EWkPSDv9Dy;#)$Y
z+_ey6vr5OL$1<9l*9$8OtEI8FW4tC9jDW#<4{Gcd*U~rBUU^?(zWz&Xd_Xhn57U~b
z!;{BZX2{7`w{yxNZI}#Jigzo0LZGPz>~O5eQ$cvfA&UcA@?ypEEd+2|t+L%qF30vX
zSxFM#2TvQ)IH^@i&>J1DVrD9F#z7nI)MLR%8uneot*NtPs&cWKF;oSaOYz)hvs(l6
zzFhrGp||8}wd$E4eJMDOqNba3iDT7jmA;LS%l!fGG4chrGRrr(2dZnnhuCGO{;b1L
zagOrZS?yK_j~zvA#zyGNtYnMKmLnhzokgOx?6_h$&>W!NKRyhwURs4R{KxDsp7w&$
zzzN$vrX?bj(Y2~!pv|ERLSbpSxlQj`*zzV%PQMPTrUwGH`>d|Kd3HnD{Q?6OplFRR
zubNKa<YCzw7C5W`qPxRZLeQmLGh>RBX~mYJqHyAiGA}ka6{$3!MH)pC<m+a~K7y4S
zZLzm{uaDJ5)rwt>YVLfld23}`k!g{AT*99cC>FAFxa_FV)KAsRV*>2XG06%wY5i)W
zSgWo1>)x6*Jg!?Kjfg#m_R%!^h*UpK>rg}y&X-XW%a4(&t0JTXso;WfFxr*$MWc+&
zeJ2@0+s%0eW8~XVe_~PAqtmLmr73R!rzGh~U6rY2NS-ujwCh4(*Uh=J717(ML7`*9
z(6lG!vlUe-=L2n2z-Rdds$6N0^n(G4VzGgare#|7jsE}&bRg~d8qcCs!&)ZCvn54j
za;$~RZny=uiv6m}ceb$={{WJqmr}|Gf{d<esly#E<ov6v%D~D466Dx~p$nCf;6YOQ
zivTf*R0(Fl9-N!JX{E%+;aaKmpoO+$n62cukjDY+y^WooGZ>bu`<7a@uOgpSW#N!w
zSdQ$9ZltPM7>{o<dlP8<Uv8Cv2EPzQ!w!q5ap{M>7#p3oBXIW-xNzC17PH77k~v{<
zr8zOHAuI%{xhJ#512Jwk)fGaiR;uqB8qeQm<~>1c)VI`Qx27?Kn17&5YkeF|e_(=L
zkd@ZJAL<bd4HKF6`g`4V7vT8@C&6?*N8t32WMaIK?Pg7m5Cy`wjng*?nYkgvw0q+(
z8<&4k?<lg#l+V#Y&ts7uXVeP8v<8(xnc1sK=nhOvwN-@fVd7{8d)}&RW;9mMXPU(z
zM=svQ#eK6|W=nBT(yvv3ELUenvghbjg0u=dC;N84D-}iDx~eUuiGsuSN;klRWkny(
z_S<c}l*T9R7|r<t!R(E+kJPf&O|)ABd;b9SS4^Nxi!5xHhU;(fs8+UzF9TTQxv&i$
zK{ZhV`q6_H@h*XwbqBmd<5iXsvn*)FAL$buQNV0jN{vsdqIqz?H)-r81x|g2CPDUJ
zhh-SQ2(<f;gfHcO7eM!19A$#4hp_59@m<4nc{oL8@18L{4)0<zEE2HIJW5cjYP@#z
zxm5MpOY;$~qn?i{R@D;!0En8;1@hg?QAYVFwxxBYYhT9mvsQ$Kot(2%NnXw#9<=Xm
z%Ua8B=c`}q#c8rKgVoI6@oRwNQnk5Ef(lhY3vyHCS73Czfw>W&K?hCg8u=360Lwr$
zzqYsLzu3z3Iy}hxRL>J}MT=t7Su&Ljq2=gJeN~D94Ei4;ASDjr(Hjlz9~g7$x|?Tz
zRgk2#s}XE1lXCC&aOyHv!;QHWwQP!NLtZC#4TTZCr^C}oSlh37%^1f1jYX!`_FsqP
zG*5)&LGZm08GaQ{?o5A&hSWr-$IiN(y6^iZiT7_2_uWI=$ufJ%d0nMU^SPYaPS(ce
z^0x8V%Aq;5y3QdLYpB-I6MIBeLypy;uf_lwS!+T|Eo&^~*x1}acg4jY<aT}{U1yTj
zQ+1B4MDis`vt~hk@~*2bZ7m61HSks=+9hdUakfmWV|<f9#x7f+#ZH+>KFXnEFjXvT
zb+JPa=+wxdTC%)@NLsD>tbZegZ~3G~2)t&*+}tdnY~*LR{j~Un^BXK%)ZEm5RjXJ5
z^F2|t$550(%6aP86Nx`_uPT^Nsj|Qnu+U)`$~`sKCCm(C-%Epill~K7_g{q7`@iA%
zH0z(zVXE?#iob81tzm=OMTkvSu(B5}>SaZ&q{^@0g0YWbMd2vs6o%a7A+aZwXPS9h
zc^Yy*(|7rvD*j09?hZZ0TG)!BV~wy=wDh9a<2qW9cB4QJ3tI6SnYoEVnQg6MC9rV+
z0Pa3L8}&23gud3;6TbM}bsP(kkmZ?;Snp|wwNQc@gN{?j!L~`2)5p}%w|a%{VC<Z%
zP#v~7>@A0Vk+GtcrEA50Vj1l^i$!Z=IB!o=YBj!HZY{^2nTEBz#^@+>(GzT@QD+uL
z9KE4*mt~5RkfGVL7isL%J)AD(nC(?5Y^0M)7zx{MyI!r3eQ2xz<zk8UfMwQl60h?l
z&A;ifEU<hZ;#nD1+?H=I>-RJ0x$Q$MrT&y59z$Z7D`Q=XRU2x~)zC|Cjxe5J28Wra
zk>Rsm=KXT!_Z}_464eHcVFoK&Y!mtZp)WeQ;yEK=+)I&NSk6Y`V<`9Vc>AutYLCyP
zS-vc)7paw+nDxi8?Q-vliLxE&qkWQ9M84iCT2@`tleNW*7r!Lj@{DuSJ$26|{{U6u
zZ6zz9OEHwwz-@_)dh6F4D;Be5Q%Ds8)7Oz_5jFi=vzu&~Y|#Q&v$ibYd+NKrEUV(;
zfTA?ubut%ixYbXl*`6L6-@9=heSMs3%B_{2pQj?pzP&GuUZSn^0Z)2hfD3HZ7BpHY
z;-s)`>|+jj0$6y<Wk>a^jpHa)@o}*5%bJVT%arrOl6C|)H0QZ?Qmqea9Do!t`hrR0
zy{90hiW$L}31v=7D*ZV<K~|39<J6$6(v1nfkzhZhOUCbgz1$ayV^TG<zg*es08F~7
ziwg<WoLqA(+FXo-LINDMmh91ncgg5M%5Ot*`*|w?kM$zoS=GL#%E>o2mlGFcI}Ey0
zBgTI*wb3kD&Za&%tZe(nC-4N=kMPzmUU>$EbtPpN)Y;T0LadtY=zR4o7mERzIcA~&
z#=Wc$0oe5_`ep6|aUq|3L$bZ{I?&k~5yv2+aT7p5s@DNK{b^^A`b8YgjAz6T>V=qj
zd=OV}Eqew#CLYGx{DSrm9y)A!r}Hp3=9V3)mW^&!e^DcKr~xJ^wS~|vtwnQ)ISaCn
z<bsPe##ctDddp&|RTeF2-hlN43fmhS`4-bChT6k$HRPq#yRVZ<oJL02PIhtuMP+=m
zU(hAT^`0I+MV07MCll=}R#LOBF_bWFS6W?Cy3Ms!TdFu~La4{V@eWeD2f0!vR!0#N
z32Xt&A1U0)$ZO9O$HWdnm0M7=#2srbvP`p)(yev)xa@mJep^A#%v(yRAI##6d-mvM
z67H12RaLK9O1!FM(fRTaw6eO~dV+X{mfx{nR6$98D%spjbzf^-RtX?qcXR3K_KYp4
zZZ`*2U;@Rhjm4o&_X;pNi^&*;tOp~>mC3QsjcvA{(@cBv8JP{j`ww+vqbvD`q#z6j
z;|u<vMpe^GyNY#U#%_e~VrcPgA26*q=Kd2WmzFJz-Uf?pqPs-wn%Z(*Zhq~~kxq@L
z(=75WZ((YzwxOlRur+KG7^^fC)~Xh9S=aRmaQ%0W>@`9CAwMvFBOM8IaZn&5_O3TI
zl+qD*H=rSAZi88(7B!0R6c;=}-bd-y7NUGetZ2HblDcT~msX$riUnT7`D<=OUAnk+
z^ni#o0{XcVpu07?*qcf&HeTx!)$t1_)zV7{wWj$)?FY#FO-{83Mr77lp_O0Bj<+7v
zQ=@OL<U^HfR-sT}zP52)xjjyUUP`9Mw-BCPEdY;K)7PkR&s<qJle&oFXNs;xhtulc
zARJY<27qH2avfPw8#5Qvkg>S;A6#Jj)*r<Dh-SU^D<aL$K-q&O4z=||RvF7=Xx2)k
z0P;KFHQ!6@SvBhD0sVTKg@>m??oVp2J2ilA_5FJw>+P${UnYxkzKHVb3wbwRcW#y1
zN!@g%U7eHJARl&b#2}EMTV-p$O14}(=g4^Kt+nW(YPIZFwQ8veC}nB0*Ni7-$9Cn#
zt4$WO8kDN9(>7Fua?NWJo=J}5D-wJ&Yvn?|kBGz{^SKdgzO}ItEUgs~h9}!Y<lex|
zY?-Y??=4ID6A-m^`gu#oH$fY$wKFIXQR3e~P0U6wknSsL&9}31L%uaqwANXy%DVR9
zNLw~^nRyg?EqVji9Y)2xpgtDweobp)A@P?I#^jB!*B}_2menVg<-X>A^`Et4Y-($B
z?UyeliCT`Gaq3bC)d-e2<h+89IM(2^)<osXsdBrOmDgaWN9AJ#PDO}andJ>%AZ!sF
zmhJg@78G{nvsa)h)Sjn#QYw37f0^Qj{0j&&t1J5;;a5ff0LI=tb!Jh&MM<(bSaxF>
zsbc_}h!gW;i$6(Q9B|<==oAPJ;pk6Ui=<fAbM7R`<PdRt4Rxx_+WBMoCOPurFE55K
z3hh~rHJy<N-fF;{@5qUSN8Cjz_bb-jFUf2g<2M<JhpiIdX%lPG&5gtA+;rwbO7cJL
z*wkYaxo$@h<D_Enr2(yY@k#MZb&sJ%daXn_^!F{Nb(KF2xxSl;$@I#!&!*$e`g#W9
zY&1IO9QNKVo_*KdXl47{Z*`xsW{K1zLLXroTUPy1OY>NjKZ@$-2QN#H3h077VTgl>
z*n!ZU3m=ArHyy{m$yJwFj8zfKY?Ucl4Z%*J3%<8E^Ai2}o^j>wwLr7e`FwImriH(v
zd~D=3hlmlcQb=BY+glj94d6mH4nO|r+Vs`!?#DyazsW_}B<LuOmr;OOWMQd)pXw{%
zNOS7D{4X&70O@O(KGzwI-d0JKo!@)RLA7_C!(S<0IwNu)Eg!;@y&JPqwkrlsxk_D{
zy{776+c(>yCXcwY#cC49q~3*ODfF{`Wghe5b@IpS5yRB6^)hVZQ8VF+20tdqapcsX
zfw30A$F6O@$lJo~!^dM()ty6M1tj1<DvHdHa~s@2_N*t`6Aty%veZ>#Y`>3)2Ym_5
zh+T<T^c2Vr4Hh0!tYWXTWoZ2$9YakIk6MD|t!>-ny?~-AX2#-8Zp@}vPX<!~_x_u9
z*EFem*a|-y9>8dOXz$Zqy7jHB5SwFU0<O(Maj%^x$;U_3ou4AEl5uW(BEs9^yWH^t
zba(`Y-9}8Cch0)$taNS)49Ky03k@!|AY`+lv5~dMXn#i=yl>OQ1mgN=XN(yu6{>Jl
z3qKGKm*?a-eqXL8WMf=yZG9#Cn3(o0UFe>sv>_Xd$y$3h<1Z7as&vtYyJ{T^I0!?b
z1@Y~n$wPg*iB0(}>O5<&Lc{74LyAi-acit&)I~eBmldpjL9J1uv8qtyHWM1H(Xe}o
zc=s_+>8YQ@Gw>rHS&d&Rh?@Onj;cqgR**Fo${)xO+`_T5dmU*BWS%=naRm>@M#b^)
z5Fy>XjhbyE+|63+jfJ;7WE3!!5Z_SuIcfOw+I_Nau~KM~7ApeVA=c5g*Fewx4E>hC
ze_dxTC}R~hx~ic^Sd8xD!YZ}w@>p5D$A-&XGgm^O6GL+QMm<c^$ZX>AhvsaNG!>cK
z>S}$g%fz*SGZ>n%(pJvrlYgHe0hD}<l#I63Yfx@Apxq;9$lSJnsMY$4(~qTuMRIvO
zHZb;YNr~9)kxX>`vxbJFCmlc!u*e5%#)WQCEhU5&BYnqHBI8Y4Lw7nk8aCVHmm7<r
zb>H5>i3=;(EMmQzZVGu;e3w)o(>MTqD*WpPWDTJruINY(fcZBdBW&1biQ26n{{Ufi
zVwNLDlkQTat@%cJ)fyWBRMOl}9TV~^wgwWT+~s4ee~45)zv3=^n=1C6qI(J;9<P;;
z<*=B$3e6U<$BFw$(yrTzXahC+U`_tK9jb|KfbAgU98V_x(O%bb%GY62q10-wA8B%{
z>U>*r-<5y`RX{5zKp!fw1L6!7MCJKfT$)sysPihzEI;6<(Thx?vb?Rbzt*(ecjmTn
zgrFNc+3R1?p*Qk8M^jxA3uu;Vo05l|qNjU}8(uc$^=K3&M<+H{k#e^trK)nwnz<LS
z_L|x^kgo>SNO;3q0od{*6&rfcBvObrUi~!-Qy*5q^1t}pSif<Y*68pyr%WXy^bk+t
z9m|U%uDxDJ_IT?W1oPDL*xa?k+XsF(=Aw8$@jMj;(>3_D$M}sS?Qe-$`&%<1=c%As
z#sM}Ubb$JI5?aJAgRemWAZlsV09t<DGin!5-(J9vmfVRIS<BH2*tTvC!wF4z$iAmX
zV^ddJHw_!g*H)@#EJDhehmb-!G~e)vt<5ptC#v`A0Gw4y;?y}uwwjl}HP`iD>0>0W
zw|4T{%yJuo+S}C?Q%GF_?n^^hbnFfzUoHIg-2BTM@fwR7*-#^?a9uDpxpnA1n^Tui
zTFgnA7qdTsY$Se~T6k4dt@guPG&0<wJdVyt;JqPW+>L9_*Jo<UUW%U*O4zgacZ}&6
zQR7qtLB8v(EWQ3VymEEf@&gt5*DC)262NB6V11yc^-IOALh2hTUv|&OSl<*MwZ0{J
z_OmMX_avWxnyd?`!~?11lqs}{la0al3U}3e_M42Pw&#tDcIv?QYLTdR1jg~)R6brg
zt+@?0<yiNz^qf~9bFUkWwx9>6dhTS|U}fT*-ycpB?I5C}=ypzpR&!=i%Z|2A_RadY
z`io;C@iTcIPXtVA18tuq1LLhJ<GXG=@|!{I1N3Odq*lDA;y*wnJk5dvNrn->p7j*>
z3T*G>J>%%^DsTiSYLv$QTds)~d2(zr&{t+Hb+Xot^!x~p4~@jdC}~KQvJzPwleoa|
znkSyX%NvN&#vGT@hOD;bU59ai38PJJeRgQ_(9-@aF>UdgK?bFbWn<m4>Ja7~^w~KE
zGg{vIF_r*l9m11=oJ?Ao_o6iy-ecAt!80-R-bE-_?qgSQa6?v>E|}AVp6!)}fbd$)
zhpRk+%9HOgirBhq=;pH2DfdvpTr^86v}$mnBV<yr=F=ZNkJ|R!=d?V&<y$);Ya{O(
z6W#YK$+2v;XRfiuF1#hG7~kZ^u*A>_#WBc#Rp5E*(Z+VzoNC5itOI=SK1&x;s!;$`
zJ-9*c)Aw)Y2%NrPO$o|uK;6d?)bdaiI2>J+4x3zx5oe05zKve-*3DMcr+q$16`>M?
zO;o1u^A_fcU6*iuovWZ-mG$!^bi773B4UT&e(^5)i|s2u(YP0_L)p}^^z5+cn<g8t
z*lev~QYRnC(D$4srhtG0?Wj!TVxFcYYATmuS<LZYhTdSu6!DE>s_l+w8{ql3w8pqv
znry6gsOkkGU_ZTQDY1`7(I~qWJ1?6+LS{|xYm)+9_*-sYf2#gg^)NUh0<lwb#}RkY
z4|d3jR-+Z@9d+ruk)|5KKwVa`R{>FMVpWb_&#6A3A0+<(o_}@5{Ib%7_h1}$LD1YC
z3G4#K>UxY_`ya<j0Qsw~%D_7?4VVXT`_5dU&=S5!b{0U%rlyYrlQOFoCgoW^o);;r
zLr-No;}W|rzmwgH&Ibcac-3Ps1kelYPIX1G+f<-Ms18e^$T#LUrFRr{wkK^10It&B
zUW$~|p?YOq`if}s6y$RBzKqxq*;tC|M#e=pa9akVdQ8{z$CkttIfAucdV18eHrn5a
zyCU}Yt=V63c)CmLWF$@|V~azLT=az1wq#>3*=}(IP~<uG=VV-q2e{1sMpZ}LU0ml`
zjpEet*51b*zXaW1zAj4-wy%g|Z&to;$LaZO-(ZeA4PP_LIv#*EevuI|Pw!M4mNM#6
zssVHV0Mp3Dp4t<9j05sV^EWlKx%i!Yzdtsu8@bTbR{%zCnhe)lNqjt^bv&P&-M%8$
zPOMvNU^TzYuz8%y>ZI%&@oMyysAHfEjcRXlh4gIPKQgBB0<6b}Q)Ra}*;vwYzxJZC
zkJR@(nV<RfebU~m5dQ$w0&G+5303<SiyckX`Nt;7kw=cmP;%;k+tdMBbbg9}dp}21
zw#B)LM8<KA<eWKm1jMiv<1DMlv5~i^G3_%QEv<cQsM_Ua_|<eWJ}bm%HdWRiNTT}>
zsW2jZJ{$oo_<Vc@5wRK?7(%9M0$19slkDD>jZYKF6s@DRdnz)bE%vIH2eR5HK(Qt-
ztK6OLFSKLLzyq^B?xz?wJ=<ml2jpQeLpSn2J1i@pzfQUa&!u6us;A}-+X{wlpAB4L
z$pG<Bs<8ntj={$%n~`Tqs`jbarGc$lJxtBgQN%Q@crKYeglf4!yawf+wC)z1tBOJU
z7;#d>0^Exm>Qf&eH0B&u(%MU7ZVe6XSVDl1@~tY&oQfQAgCe9mYI8B!cUn0+nKeCc
z-QTxLbU~C@w$u#C#v%0=64NQdD%&HdN{@HUr6Kr=76NBiZJ4{LQ<VKm{u(7%l~)L@
zebvwXwM$t+ZxhRM(yP2~rl+0?nl=!YU@W%?k7uov{HnBwmIjYr`&E7VT}#s8)aJXW
z*C!`(y8}+=Q0$EbT@4NQ(w?DcS|C52?ru9DV5!t6Uf=%!eg6QZ2JK@q9^Pn)jeX&W
zU;xRq4yH+C#<i-USOH4B;3&ynIaO=|yeub4S_*3IPDW1nwibrMTV-r3zPI8y&T`8E
z_aKut2SNCcb+)jlm(=kZL3nz*#;trrORDkMMC77lWLCBf*_m3Wrt8snJh#8H*O3jD
za8+wE6@8hV<!1Vh*B9bHhW#v>G(X|YPpN(zSoa9E4Fh#c?_&f)@$>9&u;tz#ae&FA
z()`oYIM0V%b-}L2ep{_*xAK&QJ0<ELcP_eo%eiruS$8cqLFJLDj5LC0Sk+ZoO5KWs
z0|V1OGLf;Bh&3#riNwThM6x<7h^|-C`epW_)nWu(W3jeh<GIKAJYa24QTF0sNykw9
zfSde(V4fBRk3g^pl&u<fQcsb{Te%3@8B~+Vqv)3hj<03&&?nX7n|J}}^c?g504@{(
z!D>amt9eYPOEFlAoAgzUb~6$SKXAKv`HIU~YKfhUK=LTi-t{Se8;GnmGqNjo^qx+1
zsg4I`%fD(@K__KvRgB<!+i7lsRL*8M!}r^L9YknkU=`mQGB3uk7(OM<cA?tJ$yRF}
z^!BcrVcq1bgXGX^X~6z4e2cJc#amA(xHJ!c(XC8u>W5KZ$zIaOy^AUJZ`Fl)BZ0pi
zZ0t2J%ePHtFqD0h;-mB`Ga0smYhVbr8jg*~8?li{?mc>%iegy^3@3H_>-Q}=&J&Dl
ztR_=(IMMXYeE9s%=BKyzjU)Dokaso?^h51R+fa1^9D)~x{{U8jLeX9+^|hlACEJZM
zDlLp<cP2$kEApwC?5B+hm3w2YXti82Lb9FfQo6;IFp0XY6Vl5L0v6mDc)(8`Deak-
zJ5?O5XrXIaWu=ams(aZisqbb`{iL;rx-l8`D8fqnFKPp*mjxZ&n~$vvY(^%1MHTyD
z=O71n)Gh+b#ue=`@Y<8ekgUF-sy&}7k<@(m9WFiM<RITm)o*qI%d9(%Z!)pPiOE+M
z_A=)fJWKxo#H?<|{7WSma<GeTTTUw@EXr>+PgKBv!3I6yk5o79m)E&!MnMYd4TzQ*
z(+Q(l*cxuaw!Q0CeQ*ll0e_!go&2{q{mTOy+%63^)*Qc*rgESIIP7<=L)_8#j7K4$
z##@4p-0B#a&D5(FyjA8NwYX`hsc6_nP(R6xK&z~(x9gbp`gok1+M&~BUeVpjg0pA2
zDN@4Eap@`oTa(AqzPk@=jMA#qA5~d2RtBFmA7;pJ!``2{vVZksZJz6j%|4py&epu!
z={@6oU0+LMW?9Qik!`?@;or=0Y^;A7@+E{Z+{boH0S=3GdL!Yj`KtnjBYs6vK^avu
zaUT=KHaKYbOe0oOn!%#yMhiTEb}GpB<Pqx0<h<DIP67?Da?KfaUy#WdLl!IQD+Y{(
zPSG4ZuE(vmE6Pi{Z9}h@BM3W+5BdU>7I`2u$?1njS|0JHc1u_2MY_;-Fs?UO>QE~L
z2DopDbF;+<{;AOWYil>^==A_AW~GR>Rz!WNA~S698_?|Xxu5_I3-8yZYR7l%t!RUy
zL~BudFP49A)Y@Tt3|g6`c*M%Ey|$S3tT^grm=(0h_;4R;+kHJSx6Rn1ySW0NaN@%P
zo$e(x*DT4YSjEpqaI)~`qEm@=F<F&?6}n_q*{M|e^05Q<mQc!j;M`2BA(N)6^&oLf
zk^8H*mX_H{R?)MnCqv2@MnGkinBp0@wrIq#5gh}1g4y1f8BSSFoLCraZ*X-sPx@d(
zIM01UiAiEz@hLCqqM=#zxI)u{@6oT?IQsz2*Iahmibu4yd)%`nYN}l1?jms;hjtwR
zG&C%*{i$9!Uf8e_%i*<*KmF87S*3WgoHG`bK^o9Kt-j`Yj^0!oYV6-!2j}T=+ueR2
zO?eAqn-;OMa*Gqd=U>mV7W!d8g@g68tULJ*CnF58<yzo5_oo>tQe#~}`@W`)^wd*u
z+_T}`b#@~ug$VXso0cwGAG^&-j`eG*a=7&t;9>4MZZg8ZC2d7>JuW-q%l3<h?n_-h
z)yyBcZmqq)(%k1a+$ZJBe*I0)b3YtF=;{{H5xa}A*$26kkP%3Qi9P6U5?JU307q}Y
zL<%E5rIr)(R3=r8?JLKLO0Q+_QS3O`R;Pm9>I^47^y95thWdfjVt8@~BKB7>y@j_i
ztxN0EU0dV7N0Tup0j%sx=v#zL1pI}fl`*sGUuXD*hwW>we{hWjf6ZK%+Ou&26|UXO
zz8*go;V_Lu3FDqK1x>h$!YMOG8sparLbG~`;w!?c@T=GCx4^*rSCM6ARbtq?AL<`2
z;NK(i^&ggIM}n=dlRm1&%|)wnqk}avFBP2vNjo#QIstVZwHHD)k(`)M$t&EdnN?GW
zQPZu?bQcr<0Axi$pj}6}9KirRh{RiIQ*OpB+^f{dsjF^vifnV%COy@+BFeT6Fryx^
z4t6>Yn?1Mbe5>AZbMNDUB2ew@xNZ4NTF1K9quA(s*wr*!9D8c31hWYYIABAHCxUpO
zNych2Y(}U?sK!`gzP-`61Zt4a7QMd`yBf2xRmo`U{UZR-gNY_+2z&PeW#jqkI{yIj
z1w0cLzYR#Ro%>&Zk6;phTjX>A(CM5go<L!ES`z}qu2o#6BJ@66n}>5z4yE;rM#s@R
z8CELS+~%vkO_xf?_=oV>cOPTTy~Stp5Jaq>WyG}mt{Q$)lwWOi4Ye%#pZ$4U{>zNt
zxKUV~kV{^s+*_D?`dn;qo-sHH<A%B8o;YfaRB9tp8j>K`i)NzO4D03z2V$(x!>b1D
zf1)Cxhod;}xyW+k@-d9a$o;B&`3<?~00xDYs!lHcrr7)*{y}0STIFdg6Wq;Be2>eo
z&z7{0nuG02IiMplhAZSwCJNxLCM~TO2mb(N#;IUkbPFQ;oSKKXn%Db$7r)%Nb&tD+
zDIX%W5wrEF^=@B-Y@c(e1mXDt!o3w`Z*CLEI8HN+;3temqp0}iJu&Hqwi9qX4>=E-
zyP?|GoA`BgVb}N9MtdPJas0T|ahG$~2yIKUPKt<5r*=&MBRd|EQ4_Yd&Ru-Kfg&VC
zfnr4yUm`#oHs>$3cIG$kT$i!9smTlPPHk*LoMzy3RQrhdLwtf_)*wY5-4AnhYYtIA
zXc;y^hELqM)UR;ZfJ2y?>*`(3rcP;0gs9n~04Qzqg(jN3oZu5sF6Oi*ry1*Cx6H%t
z7uIJaGtoC(9yn29Nc5?eP(*6CET_2Dne78W@HFK*fth<1=CJ$H)N$AMMCJH~7X2_I
z^XrY76{o$qPW=eZ76dKZ5(FTha^ZcM$@zg5B2^V9LRpj+4~hZQt2T=iX|ib%^MLy<
z%HMWAOTR%^xs6vQA`gdm7vX8KE5tw+T*9kVPd$8L$zR*#z5d^(wZ7!Utb6dTvAEfk
zgQ@i|%00P3+8f1IDiX<3mW;)+%TRtCu2r8e8z3g73;IYQiTU{rLU#<@&_2MKq-bia
z&k{}xI4t7B?H4fnmDPt#qCFtTrddGLdSOB!Fgy<fP0hjAwRv_gOqn%5_sP)Q$jN6U
zEH0uO8Twl4<Jp=6-P$qv1&dr-PUUnMwe<+pz2$_@%on(yQE7$kZ*YuEuNadn!!n#s
zBXfF!>XtrDhot&z?K@<_1MXU@Uv5G*;7hWKR!pk4e^t$mOXydM7!E8>;Y4QSau)Ni
z9sqE*IA$Y+<!2JJ6>obzF|ukxKwEhcpmrm1QL=7sqT902AD;gJolSp7AIh!A*|ZE~
z+<HuEW7is($VbbR4>to%{F3`q+v}hEgz9AFa`db_{0dn6g#+3a0z1u^6vW3SCL;b*
z9<c%_`559lMy7o{`gpj6#KM)}#KloP2q88<+w`t}<;JW)s=mg>5Z%ADv70f-AWW*+
zt6gyhv;`}z4Pk5l03#X4b_SmFCXX_N822tE&r~IOs7vy^AfjR70mj*sNTtZescWfq
zoyW)I38DdyTC~5XZdF&LQhNiXZHN!_Yx)QW+!n4YD}gx1u02ueF{zJH5UKfcoS-ln
z%5whQmnCDnZ+kv^`4gztPDGdxn6&O!js!}C2?EVcPB7OzGr%W+K|qU06KFadoAKgv
z?kPbD07kh4^OFfIH$RxV?sYrl0AalW#cfh2g5>sU?>#D~1)5!Vt}Up+PM&08`3i8#
zqr+`M9|Uj;psi}Pf|fOpw7KaVEwHvp3J15!<;ph_DOOs*Z<ue9fXxVhpo6`wcW<UE
zxXT#?dZSeunDu`pXK*wIa-6@iNCRf<&%zcY?Cx%Ea)se@0+M3Y5~!6$sss=u<25xk
zIL%HlfjNI1SpCY1CnXTw{59@+PzmVqQPk8^G$8k$<_?+=1X$kCA5jpAvM1+o5+=Wb
z6^Pjfxpie&lZFqA<aYqq_Ifj4EyMi;ZY9i}H>HFt8Fw1E)rj>+sx@$@$Qi%vU6Pf{
zZhH@Vo12@3=P9khQ8KzBRTj9lz_Xz_q}rLGIEm?n(i=zPn;(!foaTN+Pd=GeDFK9G
zE#HiVTN<=N=k3@Y(Cl^`dbt30JL}qaHSa$VuglfUKw<Zq26!s>Ki%K<L2CVy#c>M4
zu&6Psja)T|)c*htSrd<QP5n<|qVj9Ai*$wOC`{ZfIT_iCgv#lOSczDRTvVRW**7}*
zZKoqQI{wL~zG0_~bLaCTVj*Ggt$TOx2p^Bn%WxU|{D{=o%UhcN0B2h4S7<#FpvFyn
znM5_iS&v@h)HOJd>iD0vQ2fux!4fCDPhk>QKQr+k+I~Nz{{UG2$e*@;Ru5_XK^OMV
z+I~y>C*%4LzxyJ7=$~wVXntqjKjJ^X%m2gxI}rc^0Rsa82Ll5G0tEyE000010udoG
z5J6EA10W(YVR3;lLXkjHp-{2Gg3$ysVsh~lBU4~=lHvc_00;pB0SP|={+szA+UNfO
zqcL|fc5L|>b1Y3KDpB{Hc-7rmmuQ8@r49v7G()HLzBNRdCSOh7o>^L7?mAEHmm}~}
z=))YF^)cUMOz9g|mD49@U)w_S{t(tUDQlHZFHDxE=V>D8;zh_fw~jP#tAtj*ztna{
z2-Eo$X?hBk8Ydp&x7^P(7lr!|#nVQGbjRJ}T)keBUcx+-v`Hq`M_Ufm!SAKa(5n9c
zsQtAu7?xZ<Pct1}@4cVtFQz>1$tSIa?8#qE-In6G`j-ZGMUvRBM`*LdD$>l0NnLvS
z9@9AQAw6G-{{RH4`6WpH@AfkO<FvWsz6nM>RjR2Ae&kN{9czQ+L$=S9N~6wS1S}>~
z#f9nKytW<x0HVsyl@xqxhbIRlbZ4Te8%5_^xcPY&M0sAvN1>Wn$(Wdu6-j8cNN7ol
z&utNn%V{qPyJP<V(}z2bb>^pS{+VtnHRg#L?m>&@r1OF}{zR%fG3LhFSW3Q{d7cq@
zJ@lPD2+I4@zblC^bN#<n=yRtU<f<Q3cNHt8eUY3EQimErIZ5s)uVW7=Mg0m>ySUhy
zg|FbTDo}UrCvx2=l^3|`<K?N2(NU6J5pJZYI@JFFNsWx`c6a^>-C`?Y*tOT-^1U`L
z`59!lW54fz;BCHMkt*K=sK06=x_@)B9J^2AC*fe1<3FTyCQNqjdUs?-+>Co0yBjlW
z$JBS}BrF(OZdq>ot0dV1HY$tqEb7ec%o{RUD_HTlXwr!f7d$Jjwe%w%o>RH;>#D(y
z4A50um!{)&;LR>>^zy;q)U+b7Sq`EdSo}r*0B>fC%WlnolJEA%V&3ok68<UrUctYE
zuypn%(LM`H`;BO<g@f(L)Kc8-YAkGRz^pql`AgeO@{P3o>5dJHcNO(|yZ3Ii&X2^g
zOrP^7Xs!_qIx3WnGeW6siJMzT;cFB>br}A`k}>O}D;O-YUk@f;$G(`?n;3=<Je|Fa
zzch~we|GFw<=^z(r2haXYc=vJt){He=U0p5S7i}8`xQ9SSU+W1o(g5E9vINFU&w^L
zghjDwge(^BbEBdr>NZZsR(tnbmx<PPUoPyDROD1{>V`Qc>*^tB&;C#HZA4<e9dNE}
ztYb%`6{3$fX#W7Y_M<pQ1vSs;-ipsAdnsGnNjfYpPR59dxmCkLa&;eyzAr;{pJBz-
zj@7C{`_0Y;xc7Q|m_`iub3tw+1arA+l{&vY>@#s4ovUF}fm*l{>EMlNz^I8kpK*xX
zv}=uTQY(^ODcKI%TS`>_0GAKtnfq4<$-Jxh(nXB(`W7rc?*ysRko+2KJc_7RFID*!
zW49=6q&nG-{YF+tSyH~}ejcid`O`AXHh)91tK@AmO`V6yjy{f7HD{TZu0`h2V=Q<_
zm47;LY<XT$8g_r&?CVX7QpP^Tr#2n8FBH5e^67{we7^6(I+wcAZBuWm$Zy^Ios6V%
z^vx<igYL2=nIzE<2UYz9nlb&xlS8EIVzqX3I=oWf(9D%<!SV0@#=}T|r_Q`-WgNGG
z-0c$m&6Sh<AuGKw$4WAE*zIcm??F?th1aV*yBT;TS?*P~c!gulEF&)O-?@a0uL>~f
zVd2y2{{YJMXKNb1S$RrX(Og8;U5To#xjE5gknty<LG42QB|2aDH`|i5E8)s{DRVt8
zg>Jg6B^Mepjy3SH)&Brv<bGeH#;?aGf29UNjUA~gn`pAkJ2X<SD1#A#HW0^1SH%AS
zaZZ|3Pcy-JHY&;LulBAr*i>7xUj-lTM`YI3e^;BKbkoXqbens>4OZnkWfy)KJC401
zx*&E{^^s46SLao6P<P!CqeSGX!yw%siL5#ujIOSaHGW4#<3`7Bl}5NRlZE^kMfW-S
zGPyKNk5LLP2tUEuNP#4d(5oOpYfml7SN(K3vB-syb#{)(m;UWP1k)NJeTel*;SRl|
zw%R1Dyz~D61Mr+4XJm(2F<pz}MO2@G5cp1_X+B3m-DQ)ZD$Q^$5uc}um}=DAqgBS`
zRAb4PaX(`6)%PPs=vVxgiga<N3SaFasAPx8`rz#voIm7Mq3|q@$z$k2kf*rfj@4I+
z5^RlM@OCJLFZALgku5JdW$~xng>>#ly{$h7i?(_6AO8T8wEqAEcUnId!>eMx!uDDz
zJM2>Y@<k~<iuwqCDql;z5xIi;;TU-DB;Le&(FwLIZkdkctS^#`RD5X2^-zjkZmyfq
z!W|IW_|q}L8%o3f0M512#L?Q1@^*2d*i+VpGqwuR#n^UpB$KPTo6v;1w>v3Uk~F@I
zdM#gfoqI&KC*tR0w2PAU7guQaA6IJf_&#JSXzMMJmM>&0ai(NCB*^}EGRq?eg_5rZ
zOzYC2AIl=7xn0bC49H{AcX=6Rc$*-Vosf=g=yvy)+D7yi#A_1HnrudgBDz*DMO4o>
zSMVm)4>1`kE2o3QSydBOukuSQi4ub(J0UmWsw2jpR_RZn$gH<Kv_FwY;7KvZt()bW
z>3M92R%2rt%h`*kvybv)WFzoHz}VS$v3YkVDm<K6#9h9IG+O0d5p=!8GmR0+YGs|D
z%VMWIrir&nEQ`!K)SG3fjM9VZro^ha?tbJ^r<5--1ztooa%76igk^n*RV~@YM=HFo
z3i=P9Qbe98{Ytd?V#m?srS)(8X<G`%`k1QSy@yuIaEvV`y0$`>N?t0Dr?QR<MF@lU
z(`Qs&vhvddE;UB?*iKYbOn>(>vK=2C@0}^>qBC73FUFChLcW_^&-fRHwNKEpll}`X
zkv^TKI-xSr^*ph4_Zn4Soq5xd7&gJw-F`^oITy&)6k1;+X-oJf+^L*YSr*;R$*!&l
z%EI$1-169eekqmiSH=DN+=}A8P4Z)<*VN#~=iKOdlKw?kxT`PhUrf9beOtPYot$^%
zRDvqZqqDx5AB%k|N>WdolBr}tu~2mC$rO3Iw(cPi`5|sajkI)nY={2<ryY{XIetgi
z4fzm^4(oC<_+@>05_DE0)mshMbV*eb>N`84FQF=G^yj&n+_}?O;SSFwT$HU&1@_*f
zIMH%9f<79jM(Jt}K3YBSc9Q9TZxt1nHxl|BocAnladLlkShTV$?q)TzEfl<R<nZ=O
zFOgT&-tN1Tt6OX4(o{s$kr9|3YHW|P0&bhq#8r78ec2Io+3fUr!T$hrGb6QiFGKB@
zQar}wujoWyk~EUpnHApTsio_KJR9w!9Zp5vrO5sLEQ+LespWAj(CtlHraqHbbR#bg
z^tPY4i0m?gsJuq|ai_+Z8%JwjNTdG%Z?a#>Xsog|r`$N(2@(0#)tMV^lsDayyTHt~
zMn5YtD4(_`ON_TAgk!%+Mdl=0PF7ECca06QNejbFjnk^1jWfF!OiteZ<8BhQN!H1y
z=ru<i4a&cRb}KDBFO`$EZ@JHTiw?g$iFC`&xy6OOE@I=l6uN1(h~B#5#>%=caa&{X
zEbb+mjowegwvTe;m$BJVbGcbp0;G%Sj^xos{Rdw~fzW;J&oey7nIm|cO`e9`n>a|F
zN)31ZHCLf0)%LyxNw4IHt0!W8FD?6$>hWaWM&v$ChxZ(jyhJDMvG^l_*7)vo+;skR
zSjifAof#z;7}5HUsmiCAr>P`Ht?WkIn7{BsRHf^?^cKXG2jAyNCGJ1LR5t!jl@1nJ
z@U)gPZYz2bO&z7bYO&d*w;lBOGo$JkOh#9wWQ|$-P7nT8dLs!?`=#DOBJ)ERO?r;c
zZP8w%B<M*$auw+ly?5YLR(}k=srWXSu<B)Mvc+DfL@#zl{OIm3hWFWu`x$1(2RbLG
zI!hTM-&_7Qlc%8xH7Nf8Bz{M~_|dL2rIcNZI$M!V%h-$BgsSgTZto-MU%Pfk=0fbo
z;`quPC$|h#r=BBjs{(PccQ<}T)cULJiPb-}{0T2};g@HMMs%Ga!V!XPf6_YD8;<VO
zKG>eEnVW3$ProCPTD3VM>Lp=ohHWI!wrl;1CjS7y^Gz;@7KptJ)Wo+E>5OX1($X@O
z5!!XG8oFotUk7bgJn6~Db7EAis@Xrc1EA}2@`@GNZ7Q4lswA(1JzNUDQX5vZJ1O;7
z*scEnu<=o%La34_c5jl=jgbE89GstPvG>HiBtg;r%<U;2Md6Ce+_$0G#XnX~ikMnh
zrH{KrI~H}KDAw$BHawl3-?_h-%&cr>;S0R}H2i5(GSLqDvMsfi?k{mtqN5phKNCcR
zLAi3bGb&qzk1S>RVo~4JlJvC>(kl5L7ETTh7jfAm_YuT=+Dvz3D@I1_jjjCau+cOs
zkt8-DY2{cl?Gq8txk}du<ivlunX?dyy~yB7YP*Wx!E!z=#?IbL+^c(%aF6Xa(O8b=
z#!FF|-SB_qkHqdT3i6&v{{Vlc^w{4<BZISZA7>vzDXrQc{{X^jMJutm?o}I;ET7!+
z#aKzQi7&Y9*ZtBvXcL1s(~WM~iW|y@1IE-7M+}#R>`&#hv_xAVkvH%@>(?&E`->h`
z>&X4t@>vmf*$U@1_tDx}C)WLkMY<<N&my9(N{*^82HIVcqTQXMqQj`;CbM0|=3_}B
zJu&^v&-XqT1E*%4-zIl_BV!**O=!E0$W*T7qLx<l<jYS*zljYr@#s2=td7<%Zxuz2
z$b5;_r%GgaPM;@{6X@*rODyb?;!?=qz6S^1e{Co&$)q}v{FFOJKcVtqTBoA0#%3lS
zkYim$wD7KE$+}5enoX^Yyqjc=mY7GDwn(*3)2GyvoV`U^aE7|Sgj=)ckzap9@^7X-
zi`Cna)sBdzHW!sT2+M)K=NUP<BF0N9-JVsaYk1m7_!h)`Sc)Hud2lYLyJX9!qbknK
zu_pe4$8!Wox@hWlW(hPiD9S7{QGSF{CbWqnHG5Qwzuh7AGx4M=S7Xg7T;Po_V|d`|
zX*-p2soGP~7i6upO7?L6Xd?*1(fvp|awpZ*orz-Q8mO92&7-4Hpsg#fMs7Tkf8fej
z_cA(qmyXQ}#pO412vqF%mnXrQWb&czsJ#y^xbHuL+ATipkg8%xm0fON?9kFaORb)=
z@ePudNmtPS0KnL)bs|gTr*T}j#ShMuUgauJ8w$*gcx0`@J2xi(0D-9c6Y6Acw8`d{
zv|a4?8Ihae8<KC(UM+=2O%JK;ki00eOB#MgWn7y}r*27K(6atb@uoC%Ztd`eZ&S4R
zNa{1rjSoyciuV~MqOsb324U+KN{46jB7X|Ppx%f>C{Sdye+OpNzk(=!<yl)1w&T?i
zUYaZDz07w|ySdka$aHl)EBlas>jSQyRA1bEC|y)}<5nRN68Sp_q1EtwA<-5&FyKqW
zQP6MQjazcPCNxZ29jC!@T@|fKy6Kc;sU1?2^d(P7<d6B$5h5W7TD@##7}aRK$EG(i
zt1OItHFkEFJ4fuy?uZb<7cXP}9#lGA_7hbqD!vQ&NnMV*#Hhyq00hXg?2ZRgCeG$`
zVqT^NR<}DiweCe%M(FNKY-p{4RWc;Bq9tEq7UXxx=(xs+iP_1GuR>(Lb)d9e$3`kY
z?l*7Xx342+b+@VW-p6|#-H|08s@%ONO7d`qJIhC3MtOTpy-U5$&F0K_$ogSl$=gXX
z>Ec|N+gu8VXwl+zBl&t_S~1wWXuOLPC4%p`{f0L5nlC~WT#RKsbisk5RT?-Fi7j&G
zF?aqM`7knCA?m)q9hns+QKXZ!M^3CAU-wkqP*pw$i?edMvp(jLfwvKPFmNg@j}<lf
z7MK{Zm&mQ$&Zt`Lk_L7r^u01+h)#s4%am3s^pz#1QRXUhrqa{*9$%s5=UFo%5QZ<V
z+A7~HbsxE%nHIn6L?t<L$tOAFUc<Pqt~yB#GLCb8Dhp$5mM?Q=T@$dIBNRJsW4P(6
z)v6vQDhzfVd7%=20;rL4DH)-ShGCf^$u6yq+Mn2#aP}#UiJ@AS(_v%i-aKlBqAXlg
z7{0D(ZdyyYw7V5f(ZWakN}=MG>{Ow4**f|mQu;q(WR*RMveDBTWV_Wml`KeFCRAT5
zB#_ncPw+dK7Ma`7nl3yNRX7pud05ZMcs+LdSs3XpAL%oqEBM#sld0z9yApntK3Vd}
z)$+!)*`Ee=@~tviYRKsOw9=(oHpvz*a;%D8td@*!rdE)u<XYVl_#$?QnJ=Q~%RMf?
zR|=h-5QHzD<m7Fqn9I`|WV_M#P_=ZUz{<6xM{Ut$M0BIT{e^x^8AkgJA>5KGQ$%FC
z^%V&Z=_2|u68$sp{&ZXGopJRMzT`^|teO=`bfv*M(Dr55_c;}dK1o;DqOoyMlkP&?
zF<e3y*Sgm0^w=GSV@$EuBBix=*B?(JALB+l(!*l0lMIVxkch96UkHgO+=CiL$f1h-
zm(d7cSr1o#(#K3`lzBy@t1WS({RT@Cxq@GUBcR@~Z{V=%MQI`;Br22@_GQ;2`YY-F
zNBXSu#<<faKD>#EzVu0c2-ikji0C?rEg;h5X-kgfnQ{FU^q9U!`aVqP%2$=GmY<UE
z>asQUXK2OwJ750*R7>(<m?dFUh{sYTQ884Za@?U;t0Ps|Qm+31wuF3K_t_DR4Gj$s
z>beM*=-pXm-FEtFq|!S?NAgeLveR@$i%rQ2q)8VNM5-zxJxgjj7o79xLdjtgekFfH
zwUd!IC@uFx>b8E3#DpOTlNWJmf1`9ddVYc1xu2qi+(JSgt5;Sd`6MBUnb_?l)505r
zc-(dA-$<^dxipsK6rFBC%c<@5km|~*+EGE{OUr~x>unhtFHvjxKRxR|&@nHojbG71
z?yV5CTA_}lP{ciUXB1}6t((+zNl_t_ab%RD_a><!sa0o#w5@hW1XXETl<JGv<4xn?
zGfVwTuJw<{=-<I*$I@R(3tEna`;QuMD~hI59R`{rknTpNHWl|2QmxLf6BVm+p5&|9
z$q;QUNpN;;c6GaZ>Yt$R^<5cf-?@*h^na$f`;2|e8QGiv0CVs^Z=#h}G)haCgB5)~
z+CS0bp7K8@=jvUL^sDGbiMm(R&YADv`R?MHvNiYpK0D}NMbQ}N=r5wXtLVo4{O*iC
z=fJ){qpyK{68@XVd-j}vN&mzEHW2^<0s#X90|NsC1OfpC0003300R*O5+M^JF$EAo
z6f#jDBSJ7UKovt$VNh`-G&NviWB=L!2mu2D0SE#A0Kwv75(kmY#49>xVq@603`)0%
z-M&SLd>cIBA19w}%LhLA{{Zj+CI(?#MMB;fZJtbJP<Zn-WuH}tsM$ePA0EKNHP*W9
zMX7D3#Rs&;uvLueoLcA<Y3j-_+kv#wyog&6u0~z;By(8x8%fI7V6g)a{LWzTXM-{G
z0%yxqJ`Yi1*`EW%+y|6k>O@k?G6@U}b_g>IF^HroCe1xoV7E;NFpfQk5Y1MftfOso
zUKl;q^2E<j&6>@#{XUai(Awa=Cc3~}5+}^DxMd*Wd0R+V6GEg>$sF@#;UjvAspgx~
z)yjdG)etiVWk7Dpzi4hf`iq=@;c_#G&J=)Jz^tls`gL|1>f=po7TX5VHx0l{;Kp_N
z>ZE$f?^@iwZ3c?R$5O32>Hh$=P1XwvSn5@!gL1_jL%{YU*m*IVhy(x#z!{8q)zfEC
z+Xtxat8CEGW=-yd#@bN8gbsRLr#A&m30@h%B|2a%d$zd}?i_=WxTMmJw~PQd&A3Cw
zBaEF*+eZlYZ(Y%tD35OfRxr_@ZXo{v!Sxt=i4#ye>N8i7W}Tw~NS0VDLdSmtsz~!)
z7Z&@h!|@WD)OP&sWUCLojrLmjMWD1PUx-DC%GP(b^mH%8#xXYc28FZa#c0L@3yIZP
z)mgoBI*T$7vVrp0oeBZWCp;4sILz$%0=7Ap>9?_qrP$eP?JSH(NCe$3ud0h;V$yLm
z`f{gpILhKJ2pVyXvfOc;*O|TWOlL0#b43`6fq6gpCAb}1*DPcHs*;*(eLEIS9aoIC
z3Zy*M{q%#X+_vtN5Z7Q<2UW3&P#-oT;7wZ;O`&mJVpnOXbG0AN%qf*+Z<qoG=LP+T
zlN!ZA%WE_Cn`|&=-zHe>JXLAIi>myKfgCK<J)9+aVPFS%B}OOy&4&;+Pc<=C!PQy&
zrv;SoNeGg%S#l5kA~B6qfe}u3G4U3rW0<SA#mq?A4KD>utYg|LIGce`TBNqlVWo$e
zX0cWFs@~Q%6BrOWlYucd%&3PS<7H2TP&Mrytn1b0pZ@@+d8Rm9B|aKzT7%f;zy{k@
z)5SGcv~o%gC3d6dZ!=gqNa>P>9vm2jPk=nZ{nHd~mQ}>Wvc#{Jw_eO}fR^N_n1D<}
zF&#1>O`<f*1I0Sh4jElrkQn3HNz8XZaSkvD2PrSvv>3s%thU`{*j7d(IKK9-+Q`#f
zrImveD=fg_ai}h0Z#fK31XazY;J+5OMXFaZk*w7173r%O-u9w#8r|~uxyee?OJakK
zHj!xE3Ipc~CT2t?7=OY5pB)<~N#S3Dl`3ZrRb7c&>wCeJzA0%_cDzIPO-(hML$`{u
z)ey^&e&AznB&z8bZTw`-Lhe;D5I)?R_i`0*IAQ|kRJm-x#6sf}SFWzE6|H+tSym|G
zD#O6c>zUSbI*kRUD}sHPMiIkG?s|-)QkD;3Igd+|#?6(1I0(_2zK~KYO}U4}y^h?1
zhTdk6HI1;^M>BbK1{??o%sve2Fnk9%HfFCih`Vabnzd@m__tI^?OW|05ths{=euYF
z971`Sf@d(01jx_$b?@+{E&0KRF_4Aax~%Op09jmD0Z4(dm<$w-3F)cgSi5mHADYH&
zU`CqlHl(_%Z^KQaoUqvz+)k*6EfIFkK6Se6Wh)scB~S>f6*z=(9f_EmNt+sA`y|F=
zBw$2k{BC4yjUKc=3=Ax1k<XF@u>ddyP)xS$_<p1DH9A+TY@q;EB~eH)3~@2c0A^ci
zp$h|w>SrpeeS4pvwUr{`Z~?I5jEer&FyP9#v9VHZ=i0`{6L&Zt`z~WM+Qm^5U;<fv
zb&gf6y}!ZgbjIlZvq&<(RMXmV0R&`L*gV^!TLqKpd>D?(Fy~oPwhbj*j9?QnEyf|t
z&JJaO*($8A)f$~zR(2rN-}9$6-U(HteC%J3iLTb|>|Ldsj-J@D00Y>=<}GTg%HteD
zS2&iYITiT!F_JRkI%a*QXmy*0*2+wYjxY%DWuqbm6Q)lSQWeowbZkNUdTR-@VJEy#
z%<7SPh}CbuF{?JX+`&S?0Wqlz**B`}+ZFa@NO37la(*E53EgNCo=IrL0WrK{KGa+-
zn!5-gYN@Pol&m6vKfuFlt~pID6^so=f{T}rPP)KeixZfQ`!+zErM9L@%L=;92r0TP
zfWqn)7TuZom=k~o75QT;B-4A%HH`fx8cdH-zyp}y^{mv2t1-7TZfeFNE@A-(wjo>?
zdxRVa4rbnEr#wU$9^^(?!v<KgwkX?$7xfTA=R7GpL4=&bxtNMM;@!i_6X1U=`#p-B
zM?07q$y^2^q#J4_$qW~q%Pm#CQ0;53g)4t6O;z%%%xuSS2L-^+DqJMiBR4BvqLh~2
z?#E%Fh*?cymE?X;C;GvZ%~)j9xf(6Yq6WQ1)^%y>X&koVt^WYrl!X5PZdt6ZmbDtK
zO>Bo2R;=6QSlcVqSg*cU;~}${zD(MtZNzbmPqZ<IO4RBysZs{SRjp1!w7J45GgE1}
zv6Z8#4Ha@?E+VW0-xI_(&a4M857NRi$6Q9hGfj6*`3EC2al~H{d4!JXXQ^pvvj&Y_
zI>jXvY#AgHax<|>H($NZ7r>MicG^WDivzJMUOI!xwzjuaj4ytT4Y$+nwVbP1&Gw3P
z#b_?=sw_wVhGh<`)N*0syhQz_V`ZnTOr<vRIoz{v$>942;~&*ZuyY&t6_n|0`b%Dm
zY|~S54&Sk*uZ<eDmbL8UBUe2~?+q)@O@KS4U$v)P{W3RlRxlJxcudAC**VO6S!_`k
zRl3u-*qISAfD2&REn;liD;ZqRQq*y@L1y!rReVKA2kB^h`*_43q{ap^!i)0D_|aRD
zv4ZAWc~L$ivkQ3jPfae}T6B6JrJ+FtZV{U;+WLEKz(47<ASMwytd0z=yFnG>CpIA4
z&4g5>Lfeq3(e~ITk4$ZC?dlq|2-Pjx)HY&Ps`!<!fHfBM(6rxeugX)gdD2#Tti?xu
z0MtM$zh<a*0T(skhsHAj&-E|Ar)Cv37W0+Vf~%XTuI0o30H@x++pp94&9$O}CE0h(
z)K{AFYVyKXs_G@w??os)ktlF*CaIVq5kuKfh#A1itbMI!oiK4yW0)Hlo>&oXoU?)t
z?N(-~%UhXO9Lm=(6hZokjpy40;t$kBWsgxX)fJH#8UCa=#h#$V!LPb@xC~O<C{y>w
z80IO#;cXGfD-8l&QgSAZk3_3hPb9U1us1t7y~$BMKR{jbb-J~sI#p|RrovHatPWdE
zr)zAE)zr9`J8ChpYZaujhP_ZCRJA72pTXM8wU&yrlc=(=r*PC{g{=k$Khd_rsBxsI
zbc+_Lel-h*#HrPkPOWQR(cEEmUnb!<u^5*2v1Ls_Mi#{@w~MrV??wEm#fy_oYRK>m
z5u0|F1{$mA<X{7sjh2eraW|aJecM#czY#}jN>|B>IsIl8%;}l5!QyXG4b?-cs6(w-
zb-#wy*kROIX7)2P=2uy7B}Q^D3z?^^HE2$vy6b$kUZAGLLANs`aSncVWJdo0j2Z+y
zm8}tQ9l{OGdmAujI5S0|>b7ONm7zLy`i8s8B^3CvsG!)uN~s8eLr|yBNfgTTRd3xL
zMSd^qJNDJMAnI9iAj#^pp=5fmXB+g@eES9mKhb)Nsm6~Pu^?*j#99s3s;|@3oVs-X
z0E^x5r#!{nd<A)ROh)iRjnhqeMikgG5SVs3%u3XV*9zAIt8@6O-AmrW3#=SEZFJo{
zM8rRI*FIbcUNHcOFd`3Z%*?}T2z3?w9a@R?M;Q&QyWlnCWZA!V4U4exnV->_nV11S
z7Q6mBI)mrwn;hvz)KM(0E$wRbwJFFyh%iVI)Ip3u26GGMGvH;eyQz~008I{!uRPsi
zY3tcvsO$MPr8;uhcdnA>0V@@($vz1&YIegy%7R+V`>|5kqrTT#hD)<razR60!U`R#
zKE>f|3?N=kCNmjGIQ<q?Yh0`yluE4pHAi_X^w)7IsnM91*!{69WGw*VVR6oKa4WC#
zvT8JglB|Rb8nv%l?R`C!*&GVQ&ie^9t21W0w8o}pl_+vcP{j+^Fs8LJKI1I#W#@H{
zWhin9QJ8M6IG<Q2)jT?zjOyHBLIzJyoIt!03Ic)*46Lv!*(_b%^3c19mzBuIU{^i`
z7a8={!KD0+A_z3}z=%IVm3^WhC);p70Wq5+gFp9WnU`4BJ^{ypqtQLB%h;M~_OGdW
zmz1whL2mb|wsU}rE5d`gnOYp+S*OX&1R~-RV<Gsy@lfZeZEUg(4pmvqP%9HC0M67t
z4-%$h<}()a@2b>vQVlJ)DY5ihk)4Rurr@T_wkBCFweZ1eJwnm;fJseCnQIej2GY=r
zoCM|-1WRk+%aW7K=}kV5b%I`nD#Ts+aVY}<V&JwV-I|hB9KDFq*RT=04K)pl^D;@5
zDbGF;riV}UTBNM{o{LXP2CuJR)#7S$NGn@~+qs=K^4C@h;N6_;7GHslnv%rNq_Cdh
zq*yf7!KbPU*Wd_748WLOzpTnfXn^8*8I5=cx9XZD;g2nhj5ZcpjLX{ntF<(mBIISQ
zuS}a))O|_0RHIH@?`rBSc8Y5Xyb;L8(s&hDut$G@&LQda#MEjQrI{@IidGkrh*~9l
zMq76RI&4-a5sWSYgP4CqBC_C>8*vt{m;qb{YRR-G_bmSaQDgnO{Y<AW)-9Np=vZfF
zEMC^pK5GZqyeBIicRm26L<_X!Z|V$7tm)X;(^Y*+7>!yI!Cs~+S*mToLdWeS0w%oT
zgDV*_u^4t4TU?H;nypT^R1`SUS-Ugn%o-JgO-S%6Q58Faot?x@gNcrD4mg<+O7jcN
z(|I_Y`-La;nMc?r3r$VD?F8`)N{&pX$J@3QJBD%ON~uqc%SBll&0Db{YSHd})`cwC
zTB_P77~l^8Q%=E|eW6CthAS(j!}ncxK+VkWxv`F7scH5B6T5a1nH-m|Rg{?dEzgaI
z7?@!)K7F!dd=XuHhc<y+7H=H-iSQ*T*v!RyF#ev$W27K~8ldalr_EeWrhSRvL&L-X
z^DNti15Bg3YV?a{L|gS5e#g_=%X>M?-t$eT3b~K{(=a|gOZ!m+Zk2pbiEWz%Hy*mz
z8mbiO<C@a@I%M`X4BRsr`+=QLFuCGq^kA4Paxx8DOxh<*LM0%pF^BXSr~cT0pAz%?
zhGa(|gA<08WOxJQ#Kla_HCooW_M%h9=9O2lMQ_G2G|C4i+xEv}_sXp-CaY8{%BqGo
z62xu9RLoo^Bc}BQx(nd4)mY418{n2>7XU}FDw0D7P(vo+f{V3r?8@29>Ksb-EVA1-
z9F<T&n!0zyYbxy^TWr%+v1UDriOe1ZBykAL%L$yoaVlip9=clwSyfAow0%3;Qaz2o
z1)Oy;7J8WdxESOaQG>ykKF}lH!qrJl*FE+I^yH?(;?JOP343YVh(;j;iH=MY6Eg#t
zxZ(n;OzMrKLvCi{{R1dHiX#3dro328QO6_`5oJRrJi7I#&Gy-5Ge8vr?lmua?5z+F
zD&i`I1*eWrP{P~ulbm8|E-1KM7BB^=c~mTU6#zM8)>UHS%NPNWgtp^lOzea>VZ;ly
z76J1tr+N@+uco+{v2pu)cPyRUOG(HB3ZtIZ841HdEu;|-Y1&i*;6)g~iZclrhY-b=
zUbK@As>>J&zR(03msZ*<zp2Ey*p{guQ~OT9dYx@qE|-yUdDe8)6E#)X<X*ZBQLqr+
zq%%o_$cyAf@MVPn1)ouis!?mY*2HNpeww*$K(|Y=TC2W#P4a6zPInli9>a;4SOK5u
z4rbq&;0Z>0VlF-%1Mpi;SBNMk3WD-baha;uP=jS>Ki#!$+NIwwd(A$aR<MYp5RfM<
zV}=XBR{48RiE$?Y73nNQVn#?>S0yTTaba@C3g8^W!Iog{jgFlD3kU>^u;j(8D{+Mr
ziO*IjR<H+EQF&B23?h^=;#3SWWw%P#Hi#l0Fo=9dzymL8rDdUg_XRaliT3Rg=@IoC
zZxpR;F4KtiC0(HrE!9P=GwfEydYsBE7BDTfK{Hgjr2AJAKFoI;D-N>fHP-CEy=^s5
zPSvd!fZD69xl2&iF^4=X$C<Wb734=oEy!0|aR;#E;(X1xGXh{vFlIzA-5H}XB5BCj
zBDwxQ_FI#fa$p?IefDnX*Hr?cmLPv|-!?ZodRC#zmj?&tTdH7oqAsC`Yej(uVY7cC
z#@e|%i%t+`DBRhacB{Aze#dN|PU;#AE+QCw$MYNQSl`>9Y9#A<!|D(iw<AoA*qN3B
zuC@jhSfePlSDm$~X312yuZd=+v0<)Oqz+T>U>44CIBB(}+<AWEHAD9K(`+onSld8R
z)Ek17$x<exq`OU?p2K5_sY-f#%HI8Q$USVLl@vQY`<d{#2%X9$iVaOH7<UqqJVcgk
z1HZ3dQn4BEtYX^cpkjs>=6YYLC1I+Xq|z;SG_|VQq-1k9AAP0)nYIuFJ3$bUGm;^P
z^qD~HSX&-<v7N?#;P5proLhC;bY7tU0Qa$tx`qmsX;z>KmRntQJGDCVYhgoT7RiAC
z6SYLShCBM0If@OBI!cRz6%b%qq_*of4Lw!Yreq0bT&sQ~d4?afM*BdI@FuHKV7qFN
z;GM|s%%XhEP0^@Bj8~&lGYwn_-HnFTQjFV^tJ6f>OB}IAunetMhXyM{02rF=Y+0o>
zhICt3a0D$tzUZS1H42V)9Uc`}%h(gLQAKJPN@&Hqqv+7S=>52r+8j?jPf)9Exs-eu
zhFjCyn?Gl?$2(M*Epmb$MAD;poSf!jVgtq|;S0dTOtir;u5e;jzdfP2gy-~`Ky8tm
z6ZadzOGL@cQ^`{GY;D7#)@+*5RBRTX0P&e}_K;CcKq}VO77$^1HtJLXwXZ)QGiC&&
z5!69a46Evs%u6b{fQmT8)LqgbN^DyW>70=dpKRtYoRe}#9c$g8V#kU?)|-uFw?51-
z<f@IkSl40!I@QbVMrd%xe<oteuNQK@XWL>h6DD&nuYFr$DV5j{Djqe821>DeS&e8C
zwNr2RP)-C>n16_xwH*>gH=5aUrAVHkR^=uy98EbqOHo}2W;7^B?X^jZd$I!q6LSfr
z8*2ogwV=%8n0E|7CfM8=mEvz$4n*SuVqj(xChT$ThM0xx5`)xy1_4(AE6K^V_NV}Z
zJb?i7Fbt=(u!z}pj#p&uQOkvcq9&(Rr_;+dx|>YXy^XofpH5pFo~^aAt#mf#C2X}e
zhcqh?Peo2KRg0WU(HY_*sNj3zYPBMyD!P4JvD*7p&rY<iv|L6&SP|{Nw-DAjj6x}M
z^+mG5uC~J}Ezw=r$Rcc;aWRsDS$n032h?4(%|1xWvk7H;j^I`6Y1OhK79Go42Hb0W
z`5-x&KO=z@g9yk1UsXYN%I?C2jQfPLy_S(Q<nF|^1F2Y2tXG=|RAN@#s><u!<)h={
z{kS-pna>{IFpf{YaqWhi8gz%w)DX4=XD}1AlQdL>uO#ww3lN7L&5XNmJ5+Mm4A=lg
zpY<wF63$e^L2ovbTa}jBfmamLp!F=ynElsK39D@^F|=x|IM}5HTNGMv+yd9QtW;=1
z*O)oy-1}VpI@r&pUe<T6o#dKPQ80~4lad(j0DB!poMPQJdyO=N2Rqbo7jKx3<?$`8
zl;&?=o}%DPFdNRDOXW$@qYvB*NEierIIwKNh3cCsZbgl^wBxk1QQVmzpAZ&NiLu@y
zU=cMMydIrua(P<LISQg`soXb3d@z>)LC@{tvn*h>vmG;a24GMrn{sCE>`o^T;%<fc
zm}3P^IwEw`P6RDCLerR0%w=K0#HPL0437~10MdXw+!+0#8yF*C;05m8H%;Byok7IQ
zVk0khbvl=K+fJ8EQMcN7G0}eLJWDkr?XRkp<jpr(uQocGih>_;9h={5Rc9o&-+vKT
z=33ob)nc$~U82-(t8qoxn4Woj;B)MG@H(oeb>xK#yeQh#vD(oaDkFkpRE_4k>pYJ#
zqycxz({Ra3!)}bbNsEg+OCqlk*rN9DCh?Qck;FEUiCv7$Gtb7iSF~*uR`xapG=<>`
z*1vw`gsTiqLTqVj?p70JeKZlaY&*1esjRST{{U<(d!2|g1kH^FW^~}KW<NtTEjAg`
zjD#K)xPhgqo@OOrh^@p70G(Djo0>mxoQNBU)-2_w#*4U#(<g~iR*FEdg)lnjo7)SC
zZR!f7WZW>l5S{H^CeyjNRhz^fGX<IOb1-L!2bN{j78W@S)zH=!O|@4*#r<?qVZDhf
zTN}rAHxciZ>KrjFnU@TJ!3zAMkgQ_h0X`-bXU0h0{yx-EDr`c;F~M*{M8LIit!y}z
z@CldL;^AmpR?buv=RH(=k!5ZpKTI=AE$TbjG<58w6Mg#>Di$h2j^>K8+5@DqHzOoU
zm1_w$<Uj&|Alot~=on|5iMno^=J;4Za}VNe^AWhj-3x;b;CTJR0x|MbhA<F)fyl%o
zYi23Wj2O$r>45+P+jJIj1-}q%UpCyN@QO!!@9JB+HF=fSv3cnAUy_>$S!;#z&UPGW
zNi~w${Bt>$>nNp^9ZiIVM6hmZ=umpPiAV0(_RHSJJ1g6|y^aRn%8+!%-*$Sc%Np;h
z?gODwKAm@FYI?Pzx@om*cMY(40ulLh%D@X(m|p@R9Odye=vnhMDjmwTe0I%ET|u-R
zEqgOG`c$+QaYakS&HxGO8l%z`gsio-R0*z>$<N(uV3Gj~yzL8E7@ILQw7T~Na}~o0
z@y=%P0iI`Yf?&<Ct~?yg+)k*0%QraYY!he@jv|nJ@$vrvQ)JsVoQTzz$Qo@Z@J^Db
z+9m!kp|Uoa#5EBLG%b%i<u`6%jG;u-TI|~vrS1{m4HS|Anc8z3Q2UPTrQkZ6cr&yp
zQN*`dN@iQBW~MHZw5VBbc7tnoRauS=b)^ZFr2>xN3kq!{lx$#N00+LZrgc^tYHs`H
zs?Y+6{{U|anM@r<iRx~pT3tfixR=;#sfyRBAy=)axkdu%oZ)kIe;|f|82Q|Ym{xoo
zpQ@vF*|;86-(_T-ErF9V!Z0SGvH%4NWzLBWWZdSre*2L+?+Nd<r796(YU_8|0hVFL
z*{ISre2v(HdE#_j`E_J&XyH4uA%J90iIWIp0-VjUK$w;%j02x-(4o(0sF_xY%ui2W
z<@A+C&>`^Np5F&aa`?ujXIE4r>UDnyS$h5JtyA}f(q1^!X+j)3=#+P_YMIw~xGlJ-
z-OOZD%uIn9#&I<d`(O&|N)i`fjOK-92HOs&w99uPV=5h66LbFUkT&zwWIuMI%{r1^
z_hxQxYOYJFW}QmwUBbO;y_+L37O3~c0%|mkWub*s1z{SM+A)257*C`@Z&YXVf82A^
zvfM=&0&o0Re-X<!n=4%Lta}AT6Hd*_kzt|3D%h`BXutKnM`eP&Fyv|$ws6jaAGu~9
zP;(l^uA(BL6#{-lN-3z4I;aE}^DgcfKTrFR8JOWn=WZb_HZg;N2M6>YIhmV;Q<=7O
z<yvQaZLiaZmkU*X4xtt{wP)9i#nz#Vs6zvxorY`^ZX=?&!(F1rN)XCrdXU4XbETSg
z;p$75D`Gkri+12wo+e3~V|k3PYp&Ps!h}6rHyzu{h%TutRg4Sn4e_-GF5m&yX@jV;
zS=>cqQ``kBU1?omV?O>AimLB4hqA`Cy?}=B4;5aHVd4wjMC&u#Gd#<9^IBzAbj&q(
z!N&lSL<1jn+3MMzfZkYi$(1h3R7@}&pg6(kBW49k{?3ar-DQkIj09Znc3@`g;L8q9
zW*o4_3=NgU#M=dV@bt34cP?gP=jM46IGd(g5jLpy5`$Q?_ZR&+ISuMGr;Sgm=Y?%<
zwZ78&=kxUBj^m{KRi@V9n*Os>Ng>nK$MUb#RLb>Pi+Dam0|?Bzg<&kMkjkzqHZ_%P
z{mS^ZSQr>AF)czTQ6}VLJ|^Q~*qkp4Ij;h`cBsiYjb2B3gLeVXREn!zwWvgQ>F}xh
zXE5{kmkP49F2cw6v&7Sd+Fh=$ysNA4==P4afpby>Qcc>Pa5}dkh~rVFCTN<<fvxup
zLULyd<k?s}lviA>`eNO~qS=*cN0YON6=2#WmR4Jh>IVYF#ACR7V8Es_<IP%kv%=_8
z=IXSy`ObV(rE3hUOo%1=WUxzVWb)`i%<h<Pl^76+XCC<HKJ2rgrdL=~!2{-Q<J;5M
z?lV*d<C>_Z?Ow*zdR>3*b+tN10rdLN_?2B2z(hRDYs|8eC3dxDJ!<29dxMNU^fI0W
zcR(8gcS4~3;gc90qHfQO{&xuYC%bK~F$Yey!kc~<Z_HmEp}ECrM?0+j8*;dS*<M5&
z-e7Pc+Ycy2D040#b2Mqw(!r-p?~iUy!>8vHS!<V20LPsx1B^K3rq~ymsePMpwlOf1
zpKQ$Im@r2IzUfAhKnBf5r4VecojX`}IN4gwMzrLr1!pr)qaIrdf@-zZ)FnQmZDPSM
zM;JHhI3*vp9}_1WPcVA|GYCHzFnRX)nLDuwieUsyku(_CW~BEt^wa+U%CU{>hMK{W
znF`e%%cazASyRO@%M&u%yv1fikV4!t0l?bqq<AjF&fw5uZhwvE=O}#V9u0%#TF>A~
z{y<H@c^jMU=x3J-0ORz7Gcz2WrxkbiO~HJcl=mZO!`QEFnwo26L%B%IwNFxMyFi+~
zF+LWZTCv8Kvr=~fyqS8o(YJM-QVpYe#XDMKFoQO<2(V{>G}?8kcebZeSnW+dljW_x
zs)i%ob;km|8y~u=6$G;7tW9sL1rRIV+pp<gSj{?nEXH5z?8X$+ec3S3$Z$w1dE6k(
z#M&U4{TYOO!opKiSa=mz{Jx8D&3bEvPIqhXRRzY9;+8D9?yNM`V``XLei6DB;8AX3
zJkDVvI)f~xV5ysy?ihwchI-Y6A&|s&ahPysCv@5xcdX%})p_ysnfub3)9uIf*pG+O
zgWoz>9Q{povCTT5Uk$C&7GYwGEv~gl_b9~ryO)=vTV0C{^bTX{1Ng4fyNyPxz(fB4
z^guRodSLDqxW)-HbU?;ZE2M5~FS7R9n<~>TUG-Ks15Kkg_d5!ySaqX3eR|?+8&PlB
zUV|OQDOJQ>J+I+32l-c}ttM1PTC5m0=zrm6ozu^V4u3(I$ehd>@$KpNS5b9u+IdO^
zFO6oE92c7$aV^qwy1F%}Dcf$ZP_KZSrG&OKqqiU#Q^4NXjIzq(DG_W8yDW5M@<w1A
zWr4E-m;^ufU422hciCQ~AjO-%u3YWgF0}It)nc(Y&e>IsfE!fUK{Q%4*}RHFaXm(X
zq`hrUl9a)&kUrLO4%8p<P{14|eNW`ekVNp<ByJoc=gO|t+(|5Al+vVTEJ->&CjR%o
zT~$MBS#6daw=pSq`)l<70Qrp#A}*e>J49<#OLc%vN2?$>6#AuY;XP0BR-r8&*JxF_
zODJR$Gx&+j#0LUq5jpnrKBoE)8a-gzAa!vL&GP*kS(3MD**JI6kKy!I!J;!wpeUkr
z_P}u!vjoI+%(95}kYZX>hHALnkbr#sI>Azi>AgzDK&k-RxzG3pe9IX@A|+}UsN(xC
z3%1hu<uAJ!TCccy*SUH~DYptGw;c4V!Ou-Gk}E($_SU&4+f=war394bq{+##%NV$%
zZY;%)O%yIVw%@FKJ5&N?T2^S9MIKcGj0{4`BU~lg#R6aIV>nhii}`A5uCd3`Y3wod
zj=y4RHS~So>(Aj+TXppv=5FKkgFH;Z<~r^ehKnoasy$HFcG*_3NsDT*gaa(l($Vw|
zKGUbYWkTd>w{V3F97SoEAy8$s<~>ur4p%7u0CQ4DAQC3=GC#w5!$GA@*=<Ez=wuaD
zstghu_b$={SK8fSh_yA&8LWPG*NlGETRKaz61GBuCNOcFMDdAYh8QZp0G>95QApgy
zi6oklNA6i|tzpSpiIh+?6+rgRBi)GiO<ue&0E;c=#M9N&?8Xiz+YG9<2P|1*7!P(m
zjK+Pl%p!9D<{62R3y5r%VZ5R`p2|Hz>o|IK=+Q0)WK7Hn#5jaZz|b@eJjbXQ^%%(&
z-46q$XO`2l!WelBL<c|O6>Y@N{f<u!u{^c6TadW^73j3d;%%jvpw(`#F)TZT3p0bn
z@dB+wb2An>C_YIn<|RDJ>xiDj$9zjInw?v-bn9BI4sw)SeAQP?aT$<#X6)_Mi;slP
z!J6A69{l7&vuxY#z@0%2u-OfhZH)y#@)e+jfh;tiAz2P<)B202YtydWAk=1cX8F2q
z_YgD<>{eM%;n0X;+Uq*G@^PL#K*0Y1hzA&rN=IEiV=NZSIdxAnOLEs{CMXZSUus)n
zSSw_Bo5o3=AW>M{?8S*C5V^qmbMlq`61c00m|8Q-8fz~hNE&*Ul*=}zg^jNt#kF@d
z$v$+p;OsUjfgHr7gP26ewr24Su-MSN0ndR`{EAcL06Y>tO@rXQrfnzA6hN);D&E^q
zO_P+XSj*)#D$#74=J~pAo1l0a27%__W7Zm3L~6+WA)q7tCv-*2UFxbkYSUET+_vpU
zR>4J8fS5sLXUH3b0JZ|YJ@6_SW+jOxnjX^&(@N~Eaz`qlK{JR?Ftm4<J{DVM`*RqR
z=h#3A@VZ;u#|VHixqcCY48|l*q&7nHljEmhogwlSM~)$}L^pmi=5QwO!fEfb!uogo
zzKsCfnuZ}1K;M#Q4dl~ucuhf57g-llh6`42o96k{Fk1zp2M|2%X!K_>=#5?`-_ROo
z{0&B(E<N?=MS8WG@2$sYrGRXBSMc3W6Q<LjU<vWXP?Aham3ypfY_qj!qi--Q1K7f2
zG$v~-+J+CrTI_EFMQMwo{H~Uz^G=!H8$N(2-D6Up#_bWoGPgCp2^o!94S*^9iqLx(
zSZ)Kx`y0m7^TY{Z@HEbR{URv_3Q(y6zQMui>?St0s{0#I%Vk@XMm)q)NQXGgWu^Hq
zq}$5uym%K{v2|1G#QLx&)<xGu)+<D}F<t`|{{TI$8mQF9t`wM<_T4l6d_*|TXw$8C
zTH+Rj`z1`=!s?tLQeY~-YSdrNbtr&LdlMPsG~~ffMAT>lgASPin{haaU61zDqE+RP
zV~MF?6c}}N%l%OYXlg??;;c4-7=XmXYKU%cj5&b>3-}sqm`1E2!>v?|K%3VvpyL2-
zuMgMTfD+^+i2nd4XT9^Lz_Sv{S#oDg@hPM!%bhp!sQuepaYKh{a(7qN!P{{~U%hnH
zFv$8!A<^l~e@(3Yt);%N38*S@Db;5gTMQ2am@LfgF{+J3HNudr$F^pFt%2>IWkzoc
zLLl8`*Y53JCoK}Fi2(N93y9W2^OGuA1bV{=bSP)gRTD{4&7cU(sv~MtO;@N^IB(vw
zl|`z!ZJUh2fCvM8RavlPQ>0d~2-v9MS5)iwU$WWVOJJ*<L?E7Z9552J>IP`JmUPty
zTSA1h3be~v$s0(Rjp>2hnN<p?6l)i4T&QtaAwW6l1_!kCn!oKMu3&G^z4}V65$d;2
zd8brmR|bmkGzJGSV8dKB#;z2FW<B?RRG(!7=juX?BRetXEo92-ih=<ez$0FM8Qyd4
zh%pqv^L#c#a1pgq&1eE$>PRJ;+wT~vx|L304t#`|9~fi6TDim<6wYfnE7Y#y!%bk^
zOt<@l#yguH&Qobq%JC_;ZVYkN8;46{9933vEqtA`;#gkGnI?(bsP(m}W_Klei!v6<
z`2!aa#e~68+G|TW54kwFF~BSPcMfrFaTqY;-IOrq{RsrMX>%iB)u{){ybl3^rs<5v
zt{S1P6op|~xB6uMpoS$;YlDfu5v+ybGj!cIP1Ahp&aCSg*UL3(C7Qx~6Md01)1;pu
zf5cMlEu__ko(>^7A;&)mj5vTC^x*rpvf0vcI`z8B?x8mmWtq!D%-f!6*f`rOu&bKd
zyGrvB!|ux4%sFNzHqEl?1&1?FLQ#@4?N>vm-C+gJF)@#3)9pK|1Qx*z!-s0r@&mH)
z{(nZJNS2NqTT5Z6)ZlWC7;vovK=4_KydPq*tA!y+v-(+>n`R~;NVP?#1;pS+Xj(Op
zyf%r|6MWq_P2wArM%1irTsPfs2sEwy)~eUW)9@-kD^g1xYEsdCLegS5u`?`Ak=j_Y
z9K(zPGT5GZ9i>7R%K{1=w&qwt@mr6vpF-I<qfS$n)Kk<@LRxXYb++KeZ1O6`IJ@rl
z#8lh;2Sss%wd;t%hF8evVIOL?c>NYuuDCbpY^Rl@Qbexs@Dl?-U}&!a2iT~LvuE^i
zF*eLiv1@{;5@ZNo7L4)j#Isc&Sq`Yh)sK;?S@mlUvK>(~b+&k2CZWFM(bm2~eg$8V
zT8W9%#$wainW?1NODIs>DWbiJf@v1zAg}jT8->V<J|OTR036E{j^I==Rso}9=9><7
zGdUg)iFIs_Ev-}$l;|iq3ho9!tB7kE$OQiYC_pojGww!4CaXiv`j*xQ2Ax;s7!i;f
z27tiPT);%YGiv^@gw2y|+X6vcTEq$j;x&R7g`-#{mw_$5CYJm8HTrc6=jn9u{Xa_6
z{Vz>F(=_pP8gUkiSH>nkUQFG_Cmz|BRlXkKm_HC4@d3o~#M$OD`GdwGUO1-R<DYCA
zj{xWV1N|LNku3)qdS7GJsN3N!R+)i>-2=sVuQU3GpU@)tf)8UG=h^(nmVC$fgTg`V
zVE+IF_=o$^zSf`a!}eJp`)eD?hwfN>L+03@-d}d`(R>eK{y)K<rT*Nf!IXG|#1MRY
zEdD;<|HJ?~5dZ=J1p@#H1OfmA1qA>A000335D_6UAVE<B5+X1%VR3<xKvJQxLQoSk
za={~Fg3<9{lA_`8|Jncu0RsUEKLP%g_XvtnB9`AnU-}iv3QkUm4yo;@`7%DVE>TjX
zYL&gkbga&1{gKe7k<oS*P5%J9=R{1p9GV%2H7IT^E|IJeV+vSAJ*s4Wh3CNz<P@u(
z$43)fj=C|W-}+pcZpLE9tkjHm9GMayYxY_qHkRV6^JFxy$9k?oZRjiFqG@a+CiC6N
z*0_?}CA!N4BdnF*g%3MVaa6nG`c2giPrh$E5nQnig+Y2T;Iu1oj^e64BSWI@SjIg)
z96txflspz^Y2>(~Gr@zb<kD*uF8D+=N?RE+{{W-=Wer-b58~>jkMR{uG8b*mC%L;f
zF5)4iy~U$}h-2<@^ipt;yO2=|+zU#g{L6M?O0h{>fvG~`^dYA$$?0EA>V2~FoJy|(
z^khAzc$tynZpu!w=R=kIr#Fo`M(9;*Vh0NIFh5faVjZVZ*&Dhek^3JKRPzxNZSy51
z^w6<rO<#QxI>r2b4UvHl)Qa@Dj!m4QOHJAFrFS?T^=5;c8P1#@f0OPv7B@afy53k9
z{{Tc)dNIt9{*od&Dx02KU1tR!CxPA1AE8xw37-aZF?ZQBzKm$WiW#Pz&o)C!scdfN
z#-=-N%lVA7JN*lxe?&NI=VRc;<G~gox2gClhgG5Iykdp<3XgO-yRp=AUHzHwH8iCT
z6$k8ET$pAOJPToBQ8D^S*G9)9pwvrpI#Br?U(q(YC|(xi5Rj!8D1E3g=x&ZAsX`NH
zuV`6*kyK4SwHc1B^j*KC+DOiZIc9r0oA06I!Xc>)@@1SCreP|%lD!Q513uCov_k4p
z-BgRLy2lrn@)+}z2*YOjd6Kk3DOyrY@T>}*!<+7~^>l;8nDlr=AzG5$g|=`&;Y)JW
zJTTzg%VHH>arAr^RqQ>4DsC@BgL<6KIxZaD+LIL_TaO|_p69_0KCAA!AiP;a?QbMU
zL{+)*FJr||gL8&qKar|`CN9YA%pn<Lxy-jBdBMQ@&eK~R8Ct!FYIN>|ZZgSFbKKbs
zX9B!9k~5)PcQ9}C(IPx>CLxhg<wSJQ`j1mpKaLC$Ty~-4V9hT09gLVB((0!2IwiU8
z`JTmyd&{=!$ct`8avRCYhT9$pyk1Oaxt;}cnQkMUELdIhL}+4UB?y@GL;nEANnnbV
z!3D8X8Y)D^Z`tgJlYv;z==W!_gWRDCAe2-c<!cVL+*V!YYbPvE{=^@VT_5Ge<6I8k
z!Xb*|J=tVOg1VP$p5i22g^(0PbRr#lq{mNkG;l(iAuuf%F|s+5v6>J4PD;{ao4&?J
zc|}eLs{D<Rhpz-kX{j|ql&QO%59Vt*T#2>$MPi5UB3`3BFpi6K$6Aql9@_3g$VWmZ
zIq-Q(B|<oT2&D`7ASgyQA{E`U1`&y1$oo$$_Vd#8I=ztPgV@ZLwRT5BF2WQ_yqG*Z
zO;~-3?WVnNA<%SwMcAEdI9<L7C2u)A&D(!s9<AsvA=qS4-RE-jAZJF)H|BJNaS5Fo
zAzC=@ouu`vkF~ooT^SUalf|)lVpM)Y?oh2l8pFX3Fgq+Gqp=0KLbOPJ(&A2EIu+uv
zdgTy4vK{y~(P?lfs-DCtQ0ml=@O6j?QDN#`=LROFNvU1E#wp~<k)I>1TO#aKl0<ZV
zM@eofKw3+<XSDG{3j{(HhoggIi7vD|J<LVHXhp3XoA`wdC_VHoYT90PaicFxRxqTD
zxn#_hMA3MQxvP*+iHKAjorj_}g;5aI2xKC*r>TfUPOIReTn|(=sS3J7v^Y4j^CIf^
zOsKoAC5NvJiilR-&o4$LlJN+1Y>TX_I=OA5b7DKKjI7O%MLUbPu^+M%mUlcaEdD5m
zwZ|fAq+M#FwcuT)rB;|AU8JsMBQ+IW1jn^ywwK<$gekk2J5lcZ$9@lFFGOYPbMZ3l
ziXOJrBd-cq?jfHJhZa6Gylczx3gc3NsH@@;21sqe0wJw7Aws5@YIJ?Bu6%`bgw<bb
z(8fq>4&^aTI4jliA*-)-S@18CA}tv(u#aQJ%uAzjGKqbrCah<JCRXEpYFKz<)6AhB
zh3ldo&n8X8Jv@r?-+658Vy41gheJq(mMJ5ds+}F&Hu6$m20Dc(;?DzvtrPbny*sDB
zbHL>j_9K4ihTn27;vEIqTZ*rlR>TaUdHffP^j))YQ63TBUc;8oXtiezPZ4;Ild5!z
zFD7MauboVxURz#EvR=HM9S0>xE#~Zmv2RH(WuCD6x81@hOESz>;B|$H#w4p*bav&r
zLfuan22PPLEU^iqE6ED_aE4(qHjt{=q}2$k$i_rMA>LSalA7&qF${*0R*THw#*K_U
z$LXU7w3cFM!bV-i-LdFH8)P=n&P|QYoT0gqja0l`BFKAoP30BSw&JR0+YqHekfthW
zYphcEXRBp2vtk;NQ^?8Aic#()MJq9NUn4`P{Re3&;f*2IljL-+<95KSL_?QKP4{X{
zQfBhY(eh#wF*9UlCOLGG9TZNSkgmT6N7jk{2x0gVP<asho+yRd+=jvyzhd#k%XL)`
zk|B0y(T*m{+=&n>m;V4^)<{(qwjH>hDk1|T_9D2)EsL@BnMg*b6$epPivmjf9Go0i
zN)*<lDPu*8FU+&57UJH8B9HK;46hg9i>=bKIxpndhkoM_-JTdMIyUQ4^h5U0@Q1m%
z0sL__L1Ue0RTcOYmgF+=Jf7@_+;wCqq_;$MOMz8zLDgF+aY0SK@#=EUggOn$QeMXH
zO2viQSW;T;0>R>s9;Rb`p+2JAX(VPCji-~DM^=9)X)@)JXlKlsxq=!IUvxA+%4P*)
zn+oh#W#fN><CI%aixRR!sJrJTF=)p67M41)8u=oYFtBf?5omR6%zvW_@g5G3_Ig5D
zj{A`MvDMDiAF)au8L?=G?L25^!VvH(I!X%=)XO<GJ&eVZ!oMUk_ZgEt>a?G5&CCdj
zg~%Vaq(ew|VzS1F2!=UDf)1;T!nY!EJ;iruAurO#c;kJkTDUW&^c5)1R*OWkh-%EX
zLt2WJ%91QaE|MCKrO0V6nZo>xa`M@q;ze(@7J?JeO1`pJ6rmKA`-+h1a&7t$)6{h#
zlaq>2{s<Sr(UhqTVdrw_hUEt0;R=#+{!+%s_!aPoJ;d7Hm>>K&4-7sOf6`^+$rxBf
zI6640Len?W?MgH@DR_h?>%t-GE_ahJHq)S$*zEQps$?`mw#<bw*<upOVHSW?wT!r`
za6@tTFT4DZdyGm^5sY(ERh5i#cwgjK`$QpVqJ|R)v@qcCkoq#6R(4_Cot}w)OLTDl
zPx9gXn`Buqh(wbW7w}rxy<C}L*LkV^(tF93_e3on8*vV=WhlDLQ^2%TLe{AzKM3pU
zBwxuL9SD*miLyACxgT1D5ienkdanlqtUsg0_-DA}<z!=bJl0Odx<A=ySBZ<*yllK|
ze#Q^_bgHpX&c$oF?kbUAhbmEcT}L-8ifD-7PhKTj%M!?{xl%-3+J8OAMyWx#SgN_#
z?vHp+W+K8NBleslQi{Gv>_S`3kKUCXJlSRUG9I*Cyb*Pu;cCW|VH=|*yv_$p=u>*P
zGr*O9TH-M;j_K>b=l4=d)h`OqmbY;w9~_wdO*5lsMv&n|ZTb*=k^4e)X?etSwSGhu
z^&?Bk9UJvzP5Euza68uWX4n{qnWX(p%aK}{(-**-5t-+M94WDlrS^}l2Lv<`0afcI
zQFoBWibds1iK%lhxJDj3k00I0q>E7NG6n8Ly@cZR91spT-<AkrgZ6ZhG8DVouQWwp
zQYTbK?}X)FQ?(J%*uRjGi7K)`WMWT8idT%XJU_7{A{I2f*&Sl%{>9jaDNtlI?hxm>
zNo64xd=@cTZQSE$!Ht~UUc?_P>Z7d4RXoV6${MH8C+tBI^CE7ZMk{B@xUM8wJ2K}+
zk&`>J9<$`8pJL_uM!pP~*rSMYgp1%zhHSr~5ki_+_4J8);Eg{qh_fIaJw}VZ=~f;K
zugaaoj57#V`Y3lX!3SroJVZrAMN^v@FBbko{{U1*H)0~uiC#UB?ph7J&dfR%hF$p)
zbs_wV+=h?HZ0PF>;DRCt53h2DA}W8%c39+#dJd#4Pr732#m?VRa>8j;N3$XoAy`7~
zZqFC;h*x`?-OrsKEs)O+%ahr686tGy2tpX-yX1(X^w_BWft{E5G4(ApQ63&y?-90H
zoqi{TGY7V|U68jIBBYv>OwW46L?Vb)B9oKvorr#+3asqI_KUKxVT~Um9%tg(87}7~
zI?p6k^dKDvQ+XllV<BTmxnat~lm!T_H{LI)bQf8Uv2nq_iJKu?^mLEi3*SZK*>Ez;
zlJB{A{f|na7PTfJj6)cU9VL8_m$;~VP1P10qW+0Cy-UH8olh*B84$-i$NDnQ{ikLg
zJGe%O%aG9NAF<I!{cv=BT@eaQQf0_Sc8GQnLMxPK?rB84jB>x+b}od*L_|bC=rI<Y
z8Rl8%yJRY*B?)#Tl_gie-Q@JbLROD*#uSkXEiCSCu3%XjBI-ZG7x;0#_F|`=%!{iR
z;gEG+(QI^Suek_-fMwAAzoA1yq&@p(NM^|BMG}XXV)1VD!bNE%SuB@^d=5(}+`FGi
z7D%v!qVgAB4dHnruP{A@{{T!w^?{w3xO!E~u1EFEgnHDUbr8!hz2NP~%afbEDpHvA
zW46q){!o}`-t*k{W#v^}q_HTdk|OJH$f(!kfv3!|Sz0x@4_Y6+ZR$R}Ka&3d>~^92
zk3yDzuX4F>$i8k|Qo7uEye!WLu&Ud;6=COtD-6RSsR?Ufy$m&DDqBw@qa9nDF`@Ne
z;fwq@{{Uhv#qPBDkCE7a(Xr@rWF$fm%bO4{kssy6?f(EP71n(H3_sbG`9}l2dncqu
zRigCd{{YDB@XMxgg3&B7f36a}SGpZjmmS(WQ2s|J?9Avz(Ek9TWKv{bk&aNZ$X#dV
zEevvj^_KGBitzY+%va%_(pLQ+`9uEz_Xa;kAK-Uikx754a$)RNA3^uo(T!Gp()w=9
zC1N@#ND7r8AYJqAY%bFAE=Qa{_A+6P+Z^A?i~UEjwmgp#%=|yEs<d2-xnE1k$J2eM
z-f=Ee{^Q8|XUElX-Twgp!~iN00RRF50s;a80s;d80RaF20RRypF+ovbaS(wZk)gpb
zvC-l1K=Dxj+5iXv0s#R(5Q@wEE?fB9_*}R0x4D^YxVO1+ah~PNmdk!Z;}TLTD?#v~
zqX*#X-l4+@w$+Hi;GDp-46wxK=Df>zmiI00T((?a;<;?LTP>E$W&Z&2T(|Ro$b6`C
zEQDH-aXA>8R&4f0i?hU`*=Qv$$Z!u4Dp)na7{D=fcM6o7tV3fKF=98a>yiOs_Yuso
z1by=%f>SAC3@(B<X8{>q;3d7+q4OBvd(UyYQ;28)1g-$|EJdq<O^>(nF%IF&9i?xm
zT?4qlBG@hqBv3&?e+&Nr8pH5@5B~sza0i)Ww{*w*Cj!KxxZ-XzquV=^kZ2`}r|xY~
zLr&i?0a}%O1P?3*sXcEHp{;6PqCgC3@I14eaqMA*SRCqP*=+ONND~k&rLHqOQ8xD+
zH11XMCb^VS1r#}{tkJE!#ETYmM%6pT`;@xZF@kCZSzJcyb=WOO+{r5~8@NL)o*C~J
zf;`M|7;CbX{Sv_&-yfn1qYyju0|n_^!sjk!OofVx2)ihXftjvV8E}nP@qY)+%lJP9
z{4f6ij=7dxETpV_R8-gtzf#9CAQ1Chsg-7q(fuk7FQ8dtG%XowB+giPiK36F1*uf(
zA&Wj?x+x19uTy&#McfJB`l#=NEa>hq>{MX~Ov~vqklm5;g@=n9-3=9@JjrbW=pu?y
z4x%8kF71M5A#W;(s{qCIDt$U9`(vqKeIaQ(tc+z8jS4h^4jSTI3a{aXg5x+St9@Kp
zB@1lDA)nNdK(GxQvY-tgvALQj`VQfsq%v)TlTl!oH!Q3a46Y)1_&zW5x8!~qe*^OC
z{FN|<$O!YOqj_Lxg@p#*$OP5?VHZ}03&HL+i01%N5oyWJKXRa{&Z1BvF^CmlT|pWR
z37bJ(pQJ%!w<snRWOyxrrf%U~Btx*3LMVk@#ZZRWU<yngAl|UTeT<+kW%`C3{-#z_
zs4R^jbCAJ%nNrcQG1Mj7@<q#aE(rloFDx2ZdxR?$)pZQvBgu(a7S_08xXk5+kd&uz
z)+Edi3QL$aSnM1AB|->Rn8RUp#t5y+NFJodX6Y{J6%FaCnHr)8stN@0-MT??9{w&L
z;j#Q*ljZnf@_r<zamdO}N~pa`LMXMCc4j3MIZaow7DontNT{JsBP>rs%o2`m@E|WJ
z(@YC%7X)&Rr4h?3x^QL6*3J{|8Z=nKF@#8^rD5BtR1BTPfmu-n_+m+NiR9)vEL{7I
zw2olGgTVvPKnw`@5|MzE0)Yu;<XnL=rJ2aIGJv#l&8JX;gg-}8;RaAdc<BpAWMU8o
zyFfS>MrcKM*PpT=8rWAC9U#5j03_yyrL^Tm!7IR}+fbk^Gz2vo)SXOYh)+a200Wr{
zm<Twx6&SF%S<E8CFgQ1g7+K6?Axyd>LUrW9##IXm%*fGkCfMUHB?8Ru;?+l?mM0!#
zC-g#$=lI8|udnbQmHgl0CYy)_vhPzq+Znyr_JTWo(9-8fD2W_}m*71k<<&%{CvMq=
z+*zrt@e-P_K)Sx-3`%BkdSm<>ImJskRoXj;W~F3o4ag*_nRWXmpR}feXkB=y0`6YW
zIwQhui5JYxgq+NFr>a4+3Mn-c!Hra0!#BQCrozS;pAH^kyDl%m4J%j@IZYHc7Nyx1
z?8G3LdBahJ7e&Ux?1-8eGRvArO;W`3iRh5VIyqaiAWIiF3YxbH6EqQA3d`@DUvX{t
zfW$Q((TA`VyAc&YEm>e-zwRRTJhCUGJ*0M#yd8B6uneUFbTYs#bHE<^m%)bdFtuGc
zFu=AG$k6tahzF{_v@-Yiwg>o6hw^3chipQT^_YmY0=bB_9v!UxzFifb`<B{MW!bnn
zsQQ_hhY(KNw=rR4Dw>us(n`N6V##Uxlm*JD=>Rn5IXYu9eF0Z2Lv>X=MOKBBiN|Et
z8dbSrm@nA_mW}r)(*Y=949&GvA`4BB3|rd_lM1L^UGbRfX0fbXAAt#Ua9{vrS1*Gu
z<_lZyQW9bNgFqD&vJ}NhTW^?W8$P5<N-VofWNKAZg%ZlaZA=yFzz(gsON6i46xS;q
zOM+Ntxk9U_Ap#d0hJ8W6b~`eiaJgxgW1A(kHZ=kKR2}7uavh}vgko2rg+agZFK@}j
z9GLanb3j+@cLYc1Bmgj))c^?#$MiQA2~(mKsDFVW_#ZF8Fuh@8G9JlMKTKm4dp29?
zjYxO#<VFET39@;qdfKi&DlD+fHI$SwQleBoEJCQdVev)bfeUG-BQ=%MSM!Q$j#17|
z8xx6AYL&X<*RY|KW9-AYH@NC@^(buv_Kg4lU?SBDJaS6c!^TI8n9+t>ix6#=@Pg@>
zxknaY3|PjHlu$7p&`t9ub|O&4h#^4^3iNVP<SXp2FkCIpmF5Rs<66EUN|zQ()rZQ*
zw~1i77&6@r7rn|z6h6pxDChRg-Cff^Z~z8naTjv2HGRZalVV&YeH99Ubg$bT;8vwg
znq3ezREaQ9=#*JDf8{s#5%Oh#v>oRVTNRU&>MFGjFFq1JQjaK@TLUWyuX}z+<(U3$
z!+gimk66bwF7k*NCckV)6h4-Y0=i;6i3J2Nv?9;gi%+EJ0Kd1HVRi$>OW<yVu^<p+
zKmoW~#0>&~Ut<|Uyg(sKmavXQqh>-D>&FqVsp6rrLb@d-K~VrYI*z07G22n{Sr9<a
z9QY+U@kA^hSxWx^nT-q?sgFzQ4zSv0BTgBFb4;{IoUtn7OQd{u{>WWq156FP(TrkO
zfM>K&08Rt|#ukp@<#RxxJ(^;JN$p)q6lJ?$>LoD>0#r)<{{XZaq({ys1hl*n6~~AM
z4Pz3sG?u*InATFOY32^#i=^f<R7~RHsT~x~cE)HIhPNy*NGxO%HoM9dT}8&i{!C1I
zC_zDJyviBNAU+=*ufU&!_&<pWVi}9+Im;q(4j}R{qh3q6uz^Z3mCa7&wID=JVj`Bh
zfP;YuR8zP`tfc`X*#w62V^kqP+n!U;L=rEC^lDwkP#>rx3=(8#F|f^J7p$Z0l#g(Z
zV(oN5;0Lx=8EtTf9i!5$aSGA=%Eu(}P(`w&v}Yk!%>m$!C5Wc`l~)WkeC{?y3<$*a
z1VvZlLBlCxYOW@H!eSKV{+O-8OLJ7OG1Ul{9s*S1utxNGA~wyXMMLeZ?gZM7jCC7o
zs4|oUYYXha)&)bD)f{F$HVJCNP_m(ywMt$R5F&E)MzB(-l!4>6Wf#<j33HL`SH!8*
z!gnQ*wS>^`+%AH=uRbLn9fQOPlfeeHj;0p`Pn~3iSH}|hX5|2U-{Sr@z1-?usMih?
ziOPd8S=_uuOH?8n?iIkwtNN&rR)qpfhz)44S#R(oA`xkbGFFb`2LiO?u)+2ii*|11
z=^c`++oB5_w_X~&#~}Xz8lwaR3}e8?&TU!a5iA90I3iT#SX#EDqT-jcf*$3UTzdGM
z!N7|8lz?~{fj!2HkG5t=x;VX&dRh(!4~AS{6;SxxbVlh4_Z_{;Si8nzzzwb@MA3)L
z>L?*~Y^eop?3_vpwVF2_vZoyu$0Js?g3~5^qS5X@Ndi~GxckDP!BUJ3tE{<hi$Ey#
zP*`?KmqY3D#4Oo!X(+5e9HtzzTS4Hsn{qfXKmmZvw;zMUk%$0sE)_pyV0k%}1#6=#
z3_{k60wxLT2*6^};jdTZ{uOf3-8hKxT2=#Mtk0=y!7ss`$8`nly-I1KG}#bCK@$QJ
z<Tnwchbj`$wSre1>;z>Mt59ul)HXXc{{T}6R@aJGQ9vNq>N{gghP#b{d^@60MzmS2
zFCG|DhWmxI5WMBD`aQ>u`>9s2F!S{qTgNqh%+)qx6tm!tn2Bc>Ebd8?qJZ!~0mJwY
z$b}vz{lDGD72RZjjeL^zmPULNGi8LUEvt#R!mLAaux>p=(PJcV5eigGD&0Wp0Lo~u
zxVaV)nex=D9q0+nDRF_i@`afvv$^puV#*IOti;7xA)i+;#4Fp*>hLn&kxoR#CSj3Y
z)UC|Jpuq$^PD;dQ`X^B2_bYchiBVH%dkIyxCCy;`-;BwttV35g8l&4HB4K64;|5Ci
zGyec+ItD0eho;*)xD~yDge`Z0cSNvP8I^gPA&-ep-69I?V0<u;S#1oxOTw1L*eZ{b
z){mobz#JPIMdBwfOc2WrPYcX>Ag72BQd%mtSz3rnLv46&IFe>9m&8zo#;hn1qiJ#>
zFov2sifm?Noyh)Ai9B|ZV!RC8_Zsqt!YlZ%ieYieSmS|WYW*0!g!a@|S#jeK<c4`F
znK8`oz|><i^{-OZtcm?gTAxzXg=B^o*@_En+}|{l1dCP=efpHdRu>jHJVxX!rvU+@
z0Dk5I<^(Gaf(Q;tl#eN7Fnk@~h`OT32!q=hpwzlt2$8nPX~E$_-5hYQWa3|!sm5mf
zvmmKK56vJ#ZDkL17Zf;nPGze=##ROzSapX%)yr;K(<!uJM8dY$n027<q52_d)4&i=
zOT`%FW<xP>*AN8#8;^)5r~OP*gxk%>kflKs3@VB{m$lu8!rTNQNaPrn=*wWw2U3<f
z6WIhE0i=z<<2KPj>8sk@wy?#qt0;Dud|1GyD9V)qmLlknCZ%m(xt5XoVq%9R4aEL^
z4kp<Br}d(AuZrWD-$dCy>8mfftv^r$0D8n?CTt~^N>mLpjmK>d`UujsVQ6Uo0LzBp
zea790<0DUA<AK$;A4rP%C29*Th<LtLtPllILF@;~z<2Ivu~PiKB~;Di<Cy5XA-LYM
zQ8ur&UI+*LYEia!DBkEQ$f-P|i+f{p%+x`=OxqEOJnJlEp#*gWg-rRD(ZuBj^(?xL
z)=Xhm9$Bf|aGX%ouxgQ~@UN2uwY5@Ln8o9%!BZy)n|A4d1qJ5EiFsA#7`09GeZ$K0
zo(_nxc!|Wn4IsSfgc=>e;Yn1RAyak2xL{!7{{Xj9xyx~sC=}Ib0}{f4X=N8;S3Nra
z0JQo#LveU&i^brOh*Z6YH=B<Gz8w+7PV7BPiM@A4>>Yb=L9L3d)z%8JH$k;_V{c;C
zh#f6$+A7+j_^6^rt2)20_q^x4zw`SKp7WgNJnO#i>zbh&DD&2g6oxacnFSj0B%0<f
z;xK)>%_Y`kWpr%IjlN=uTbPROtv)@YUZ=8EUHi7V9H^l5LkN7ayeylM^_$t2a;7QC
zug_tVi{f|bv`wt-b}nwT%Wm+o?3>z6#eiBQzAFJ8zj+P2s9Cgjco9buz8d@|2Fwlm
znYY<o%_LCM@=;N${H|C$bwK&Pn{5_D*LEhRR&PNmR^JM2wKsHEOvv_S&$4d+cX_zc
z1)<rsl@UZWWxg)>%S<q)O|qLb>MmR_6?#92Js^eRTlqy*nhhc@KCR&*@o~Kg<0o>^
z1fOIU*MZSf#nkIx!1n3yDqZ>h(-FMUJ$Za_%@1kYJyew!yo4v-SK~9o^zqe9I=qQP
zPQPgRN`8*~j5L(_3wbT4xr_e~2s5Ovqp6INt{=Rip0Zgl(_LOAQnTPA!j@iCo_wc`
z!NFQ4kUb3(b2}8~lt!NYtjN2_33Z*i!_{Wi>UU_aGfz)ot`S!k-ax#zFb;i!rcuzr
zN_gi9AAkoH9@u^?_Fujum28yaQCF}2&W9)^`493uBq!7U*4yhU_L-5}$FY*W`hd@#
z=N4eY;zvD(x|f$r0ZK@>-bsK0Iv&hjB6c^8?^{ki-hnB3tDO36=$6kiDs9@I!$9th
zxI}-QEOlax#4j90=HD90X!HEODvIhO3k#!;8U^Q)DL)Tg%FslEjsO?@!#MY0CVr5)
z#hAejwYvdNvh}4Y0{syO{Ie2hko$~{y^!KN+04Bk+)03#7``gVDo*vIloLd?jiv^{
zUT}|-)AV`wq-Cr3E=y-?%3hG(Znn82IS9B0sO|NgN!}%PCEe@h<(J6%(CCY%s1$Ny
z7~_coj~cQ)fjr~b`BD)D%8B9xu8?UQ6BYa5hV7j}<6n4XhA}bn4tV!>p<W809xNMM
zMjZF161BDB@wA1{RVZR`UC3IF*&u<c=)*n;_*W>p`&cSm*XG4g;$Y}|#8z(YuCHE5
zWZ7Pt%;3?5jJMWxnUEr4J}1X}a>w!d@l-A#I_dl&vlnmtXsm<lOFrDm7&{p*Nd!-0
zJ8ksLR|b(*Y!fAH!cPQQ`qHt<(1tL5;E4vC-6Rb5IB4>I*V7$K&|x96XDUj#nm5`4
z3vQq@*Rg1dQqORZ6?Xg&lA4+})KWIh?q=_BFU7?hgI4aVag9N*RWZUvm5Nt$*U6yx
zETzE0o%(F}0?B#Uh80#|-eu6U^Jn7atGvg;{aYdooJF?dPyhK<WN@1DKw9re&$4Do
zW(_o8Z(i5DIRQ#xBZpuvZ_57WsDgoEEnkO>*zlfdXg|KfmV^-~ptYyDDPP0AR%1EQ
zqU1g;jG{CMi}ur7rKG6Mn+K1Zc#M&s5ks6gL}+~$`pS&Nz6{8i+Ve)oH%|qB0;CVT
z^nZ3Jue0@fDxa+@{s)EC2J?YfQmJOz+cyula3$jNf0nlJyp@bbw;UF59M1G_>K!U5
z&FMTE_iqXHWWpDNvfF$aRes|F@|;0y7mvXx+aKp<Tvj^+C!YGmX1zDeq0M<wyHx-+
z8$a3+tNJq&U-aEl^{%7S9sZ8;66*iRAq9xS9@}5LnFvEMQ(2`Fny5X$ArxwQ_JA0I
zotAHhAlG_mQ@1rgpIrC<_>}j#gLu1`G!^oP?$fmy&F3ssz4k1mio<aOUhj6i9Z<a~
zny8*he@Ml2n<snNE%2bQF%S)3q0iL#$a14&FCtwc)?w9`%iZG<NNSNc9>Yf`b&Ea1
zpyh&D7_>5}8}XU?1CSAp;yDA&bm(4C@Q%E7&YyfLz1)^OcVn#EZW!AlVRBDa<adf}
ztU^-Gq~LBm25|6G{1vbJ9>A_xscg-!hfa<vnQx=rlT}XqTJ2!sQ)(C`Te7Ap+CS}M
z)f__7!dNz@6926yk0OnAKHrRZczhpRQT*TBrs_W$1|?duS$^8oBbJi$sX`B<-F~T7
zNPeXy#D*GM!_9upq42NafR#54rzVs^AG3Q?m#WhxHSxTyb0j+1WS0Y@v3Bl>b+@Hm
z`|cYyggZGYq_n6j2;wG=cysrqJN_Urfm*CfMB2#5QJHNr{7gFlJBNMy(O&%2Y_b53
z7wXJDWFRPC=vt}K&{xQoE)20vue_vDo}8C*aX@%-VE+=C*%e1?MvJyX#5Gjqccqq8
zrQ)9;;W8vTJ&!43pfLaT+8+oVg~vn#LI}1sf{I|bHg85sKgvDK&UV&LsY+&~*9T~s
z8C_j)BC?A;(2!la`JOK$#l6U1K}B*>l4<+FoyIEmuzt2)!GCO$_2+9pV3&t(z|9I<
z;jc?-MII-dRFmKw%F89c1O!<A=DNcQ^>q1){x47d?gsZ54ySG`pzT|_<4b_2XMi=G
zILQ2GvFm9rk*P8nsrFKGX7Lb}Jb4e}+BsxKUXmybTB7_{Cm}=DKm4I0xuk8x5on`x
zP&WO2joJ3scJe*$&q=>g*|$ylYXRLwK&*adl+z@e&M#kLZq;izMW&m#yDSe$z7t2Y
zX2B_D2yFV&`KUXR;=r$C0!zg6d@fIS_++|!Zz;0C$ACUKAy~!9f3<5-J!)YG;Dn0;
zl1Hluh#n)cWf3-jn+iCc!4Yk)8Mot%mtA(+WG3g-J*BSkqCm2}`Hk)BD*85wjzF#F
zbWg001MZ408?ChP+`-qK>%-oVdA=1(FUiv#n6cBzQ|L9vT@_eillq%`esZU^yd4q%
z2l|t>oOnaWx>NEZx)p=9cNswy34${5<;WLSkR&P<hQ1C~iH@31@UlfM7_WRQa41f@
zdlQwfRc5OR3-V11Jc^zEC-d<R2)4E3TRz})I*;U{cK&j;vh0P#mzWz$i;A*ozl<!f
z9HQM#`s2rHEr!wwm7eAa&xnNw^h-*)%2NhTjLXbY)8iK%zv2Wgug$w{{|S+(d;gdT
z2Q9s$`oR22{*9zBgiNWiAaQ_<9ZDWn8GzV5uH*L~*pZ%(YrH@MC8J6PNClDnIfVak
zkoXOWlI;IP?aSG046KMUW>XD4N13s&{J{{Fpruw4oQ-$UJlV4gDz%CYkUeZn_WT-Q
zB0{^L`gb|X!fN@0m`d1t!^l(-EA9Z*e&^c@<cLtIpq>?AdD*;IoJ?Iexee+sArgo@
zki*gHPpYOF&_Q$ek`(<Lws?~)yIkqOPIqiP6>WL~51o|SHv9pTEnd($GEpTESM7Cw
zssEhRs8bGF>#a@?c=<LxbmsoQj!Xj^jdCiZH#{ChK6jMOeLYtO<5*v2l`<unyqVd^
zN7ra^Qtr(nU3$Z~dVIdFZS!--@w)RC5xW$BseUy3kc{Ny4>{<ZNhWt~$qzb(W!1FQ
zAQW5h+P6vSnFAhgjHvbppe{$SeJIx2#D@pdT~uubeSwrNsly%lyZRVVM5l;XPk&W6
z2%}Id7@?aS^k_yBM88YQiPQ3S(JB-WJ#CafRp0MkMUFLy2OpHtj+2i!yF!Oa%B{jt
z@@!*KV>#>+-4Y^}>P-xjs-r^xQW}#kZq>=#DV5db-2Eon4u>K(q}1K7XVd`LPT2@w
zdkXFzDMls-t3lmmTt5l7^sey?OAej0DJp(n(9Ljvl+Z(YGdS6;_|McTo!6wrP!#op
zuk@61g5MCp(LKQX$9S{a14)Ruj!n|-Bg&AyY|&p}ytg{0a5e*qXo*NVf3%ArW;`nT
zen;dD*TL6roJy1o<j5W>BUsBxbdY}EUx9XvMo<;tYLW?!LAW%=O%ZR0#@;BZ&&qn%
z)0d!D<<u{c+xylA5ansKy6Rkvtg>{BIitCskms7r!1#2-@SJTD5U%5<Vwe}M>ZHb#
z40zm=B++GZfk^Vi4YF7EY?0P`*h@FcTE6NwlzdfVR?=AshPCY1#J5yVX7zG5UQl%b
zI(Kv?m3%2f?D7f96zv)KsnQOg6JMyc!4V$u+>SI?@ktuur&U!=>pIG+y0@e5m8;;n
zweqWkfv3cq#lxHDXkxhC^(?YGnpt5;c&fSNX>;ER(Sf@9{C6rnJm}1z<Tr)UxjSQx
z#I6byFWI#~UCkvI$8Fvp0N{4Wb5zVv@}IH4s~O0@ky&y+&YZm2lgpX8(;v7hjnz5V
z+n|}{;#YN0g>sy`*Srxc{Yz|*1LQefx2NG!wDr>jz2TZ@Gbe5ov9nvjn7{+$jzZkT
z?&NfBEe?r88@jeiB*QpqSKQE9i7x*G;NbHA97R=6!TVWd!x|+C&V~`3ne6*2I*q#D
zTs#d7-k36Cg8v7I?0^7-AjwhH&uy_?AP=+F(0AG8q6yE;eNvOfRb_M<9jNBQPN0LS
z=$0_dt=eaTW^pXQ-k(nF@}B>V!sN>}U!}ormrABr5m}bXn{21J@BAudm!ROK&HAm8
ze7+jpuIEKyXnX_zBPBcJ^pRj0Q$7z`@7o(>YW57Rc&R|(PQAgvXQP8yY>T2^3~csC
zhZ?pwEv1Q#(WW}Ao*Ys{BxO`@HbIh4VQ%|eti=kM2IV&74&S!bfbGVOM0;B}%UV1!
zh@wE*KDu0;hB4e@nb%?Wy*W8+8{y4JLAAocJ{qszK7G04ycQRw$c&HXHoH`&h@GH7
z0wce^D$}%7!<+=%GlDUC+r2U*1yIes<4Zc1ZS>&2Uz7*8v9{T%+@v_%p)OTz(_@RI
z1>e<MbDvuiccg47>DfWK8bey6NYgrsaXZ4d^bbsn=6_)*Q^_WD1TnZY_-6`i=bVP+
zrR*meZ7pnE&57KDw_B`F@!C)qybynH?$QckAqSm#N5-tQ>I&Nar9t2JCwM|)Rg<mi
zMnUOeWzuyknfg^j)m)G7pb9N;!(x<l8Z^+0o|5#9iU*@jY-BL9XKZ+;7vCm>v*K-s
z*8VkqcZ3x8^naJYQwtRFLNFdrk>~7`?-AAW_X{-_99>0Bw)QBZk42OC9aA3`<xp(a
zv5P?IpAOmPO34{RPi|Ksx|(VSK6}}2`jZjf$_;R^Zg=J<HoIv~De7D#%3F#x5MAa*
zH3CJt`)z*o_@qnw+NS7}{27hbz3arGh7-KlpZXc5X5E~#NTP{ITHN7E`9)o_;~FU7
zx$SrFbfS8It#;XlvR`qS*6y}*hQLso$;oH;`9)>x8*R0K7om(x^8(3);d%M}kVKFj
z<p46z&O3}@#3xJbm120#q{!P8o*u^mAlHb8cAGf%Uoug4%5=G{Lwgo5f~skbmr|;?
zxq8kN448ovdTH6Q0UOEYI}y{>F$@9$2p1nqH`3BBZ8lT-pRwm$>P$5wF(2G2grld{
zzqb?eaOaFg73~qCnaL->I~|@CJ}=ZID3{7;hLrao<U_K}<#6<P#eT{G=Fk=EItTmn
zqWaC`#^9Sc#XNwIC5+x4GH>7XTB=iueW>v>y4}`h5~j-LS0mrGpz=HKreXP(A6o9I
z0g7%tf)}jlmZ#KiaBInCrNAJsUfg!9ZF`PrlD@`>b9Oh(smL4tk+0bPoo2es+wtuH
zqljlhdnHTt5bDx8N8`aZTl(-5wAgccqN8o6v7AExxpFm>GD+r*sXpnmIb`ddapKe)
zj=kti!#!`Pp7Wq!b6vBki;E@otC6ym%>`i7R`x;?QTd!tA#LTzW?<7$KpRffL!5*^
zL<%N63`u$-zAUKpgDhAFQ;ladL3;-->2THAA4LHR@l0zgB$^>l)HOt?L`^=#@GULa
zjWr8V!c$7yN$_aZqo056iaL0C--Gy?(6E%GJo4XhZjDbqEP7vllF1=J^>)wus}#wZ
zQ#4=yKPN)z{#=kebCYi@J|b`4fYz^XcicN$ukRB?)CEhX+dJxPCeW{mut4IWY1S%I
z-yv2Z!fe`I%^@aKWA*rw<D6c>fw7sckIMR0o}W^0)g2338Xj{FJ^mD^h|A`@k%jNX
z^THPtnw`=HsDGsg*aug6z;n1<%GH5(p(<z#?d1ZO7-*sXCM04}?jdoB|39+wRhu=l
zgxH9e0ZlBaFTh<UA&PrJQ?ux3byVR3=Ehrb^Y$@I(Q6v|1wN{*%1OWu)msKRv@bT9
zWx`l>snY&)887dD@{h&GKvLPE*Q<e`!6(HBrI;;(;04EsQ`wrNv{#99(2>H8ctOQU
za%VOLE=RPlr6@DtlZB>2fU5t@WAVtTM&CIJJ~+H)Q*&qgbF?+c+*l@2k~|tx&HD<*
z*A#v*vy|o0%muBt{Z3i2xm@Qd9ezGb)u-lX`w^gAR)yu+$KExN&MWgC^Nff0vM;d7
z9d3^QznX~IZ<SfokZxW=E?vAR`{H?*0o_%3=SSmZ8F{^~b)Re&jGe~18>g>lPS0kz
z2A#}X2AA%G>OV~N;#PO?Dt`y)Se8<yohL-(AOqJ?9Pi0KyYQ}Pa&VB}YRTM?<+)FR
zLBFnrd`ee?&@rm{FQggC)<f%;O4Ye4EohoTB`v=u#2KLMvguwUu@;_LxV@lkEX=^^
z!<ZZ_NkX|{Kj+^Z8Y7Qz|MoF6_}dnqQCRAv_a;I?^1mU^MWv|ERaP=3hUr{Y`0RRJ
z+0yt75a1QeZ?idEBH5)kkvZZp^gV+dwhQKF-U=8@0dUfWuSE->ze~R?!1TcnEv!En
z#4Zcegi#|MYvg%j035&xe;hor_BPepNI5&6Bt14pD4|Tpp*=t9*8%<l81&VYSCht^
zo$$ESt<sUa=Jm`w`Ptaur@RsL7@WBi;nW0!c3+Av$C-SRFlM{f=Dp?EGYDD@W^<>g
z$`8<T^D-4E{em2pt;`qR0`U*D*q!`M6KSjwnE&K|%E?3U!mofe6o3opbuL3^Q}prn
zuL{AVYuaB;ae<EFYGr1j1uL=ByRlFR8biF_oi*g%oMPjsr21jh#j&Oq!>E|QM`tNY
z)@#uC7N1oknjbnSeHJZX5uNeD0!2t9;BV9PxN=wt@9g>!o!-os@@}vPH?m_5E%VX9
z0$Jv25X~im=c){%m^05Qp@`g9mQ9(ee`q4IxK75mv%iGJXB#xuJ3JTvGrc_$RK60#
z?U$A=K;3_dXm6Y4<m?dY&;%j=9V#3%axu*QvT1#HoHa9uxSskf`_vDa{DCUw)ypIq
zyblpe(HMS{Vxl>e9y6E9_ZGh%q?!N0IzOA}AUj^H-BJbE7nY(S_?jbTh43PR*9W)_
z6KM`%OaBpqV7QYoa6-kTZ%29i>-8KV()+m7=GC)0U%6{(oIw+N%&V)iJ?jltC+*`E
zK;Cv$O$JP@%sdkjV7+d4X;I$&`H738{S<gRMRoO6kGh28W8umr6TV{j1#e=WTt3UJ
z+oGja4NI1|IrWSsz48H;(GGq$6`Y(WlB5`W4Ig~_9ddjE=r0?1A;Ig>!FVRQ@Y6uw
z%6G*zK1VuFg-$vDgF2;cvZ?DQ5EJwP8{a)mTo5DGj7vw2OgdfdekI|cKWIxo<=llO
zn_|pWjC#Z^zyGm7y^A+biTYFdcTp^ZH0-=vOv+Yu-xBDrGa{q!lYr|0b8DyT0C&qS
zG93yM0zOzo6@boyjf}oV!wl#-Nd7W$sN?lb^IRq|4ZVOoo*S;gawSsUE$`hsAl^qM
z<^i6yg;dgm3{r8FH>rhVs~-}1Y1;Ie6-<+f;)P7kJ)*M?GPJL59!o@fC77RvkRG^!
zn}Sa)o6o?aMev!}xprzv&<_y5D3L^W=)JWWB`Fn~5|yAKJV;qgn6S_glT0I<3>Rhq
zOQ8*+*swW#qQ319E*zM9`;b@B;M+an61Ifn3eOamG70%X)dA;Fg-w|Ss;G;dqBCm8
zTo59=4B_nrdEa>GD9z{V)HIzsGf{sz((Iyo1alu?vWDDxsQP}wffTRZ)rhG(y?PW@
zZ8hH*m@w2l8Xo9Q_W|1R_9ffL&$uK;0iV&XKo>40^F{sHqWKO8<B$?xIG_ESF(TVq
zYLnYO>@7A4bOFRlXQT~+Q}DKsUSu%KUUt^==(MLChYB`HSE$G%{mh<FA?HlWd6+h(
zcGv3BR=I<cJha>jL@TVNP<`(<na#pIx29$C5n^X3(ii+!@_zt@B)PQuM`2a^s|2BK
z)~KM?+<`(Rh04A~wo3y&GSC$!J}-&i=D&-8bC9|Ns9q|j-=CsEc-qjH@w|5CxT{)$
z^8~ubm!|s;V;ARaCm76Ro2cjas=Fc<aw~GKrrt1Tl|ns%uDHGr1kpEvv#9`Y+26jd
z&rH5d*)erVMTFd$mAuJQ{*wCX#G&M-ma5q;g<x3P>8ycnEJ-v+iEJnSQv|VK)8JDw
z$oFCwWU}TcllFYWMRNtS!D(U!nkig{mgyLBE2f3+R)Buh?MTrQUH;hChGzSw%CAGb
zLWeBq8MU~WV8@Scp&BU_ZRl`N9@y{*O4<PQk{3x&(1ZyhZHe1Sj$y~DlX+r!5x#;P
z%WqjR|E)}E2A-j%EGq<j-<Q6LFO#t=rj*=>vF$U90NiRs`Y$kp6Uz2?%II?lNr`^L
zJ|pjrZk{DJyN>2xVReQc5^hjFGUDNsN^2)UVEcw3fqIh1qES*~w^uWcf;Ws#Ea1Aj
zc*FKD-z;JU`%2NE=0ptrf>>4e)%ft1SMffVtt>=Y!^nX%(e6>H({#jZv{|0Xv$Msa
z$~|~hNo4wbNfzV4jnUse-_M1!8T4$HT;B1>uKCF8FYt<65X8=f7?IXHj!9IJQv+0!
zP;c_vlK|giXU2-0brF&o6|Qfh>}kDpm(OlR4L`@tA_c&Sf;ZL*;Q@h+biSVs=E6@!
zel&f>TPj7KV}1GJVOw~>9hK@f-n7Q#_jDyp9Wtk%p4qPV-dD)_c1!Go?qxFI^KIz+
z)W7;Eh6j&$E<R#rhq9~Q(bxO8r<vTAMCmDhVmVXUp0B8*{A4l0+p#x{cR~KEa5Lnj
zwhcm53f59gRc=@tv`P~m|Km8%z&rT=IcPC8IR7?xXLq2e8fJW81%<4>(C6KLEmFZx
zkxFXgxX*;89uzetJw-H{mI?X+)ccb20z-$k+9xVr*-4^UP7GHuG0Mc>Wekg5tDHiR
z`8ie2^!9OQ7AhoVS`<}8-Of#EEx#j!*-T4N3Em=UPGTdOnn5d=seW$Vw`R?IiwMWZ
zg~}T^Q{H<Sz^{gMK#x13hM0}00o-y}UNhJ`+wU~tJ~y~3Q)I#%Hf54WyST<yUsLF!
zFMcRA=5*iX8Ur8D!NE;=Hc;<A4;EntEmFhLd6fTbpR7Ad=1oGRg_T3kwhLJG(<kK{
zxT1r;nJ>^6);3&c5tt)Ma;JW@Q9%-#?JAqeA|C7c>d=0hRqjHUah~4-xdG~aaegy$
zZQacS4G8|rj>H>A)>ycLXalV#h>p~z_X&;Q1J0;pXSBJnm~j-zyZinMRjqSC%@3xZ
z#>Z6lm)GuPNb_yGQPOwInHlT~?;Z|FC>X6Mb^kk@T;v0{7YFtD`JQp>sk%P)!3B!U
z{k!yGRfz}{xhgeaon(5ab$uyqO+RPSEeuv%gA%XrAQ10*mkSx|2C<k1SD!3~3fsMC
z;LL1GJapY-WyrTM+N|>%?rx(f6;1!NBI6ZLR+{Czwh0_XhJguJ<4FL5^X9DLj20v)
zHL5qA`cytgyr=d_0-3@QWc~|^aM9b;;no{adGfsRf%q-{T|Cu0$ZI{wdq150(vAyI
z19yZF&Urt(o_lWEGh%n+W}Yok!pDy(STvoTcnkY-gH{Fs9=8}qy;}5pf1E^GB~bgD
zdP<}w{;4qc9r9R&>P%lyr2aPW_KNSXn_^Ik*N>cD_nq3SzZuLliqNd)d+g`gDj>uY
zi7Yogv%p@wV=s7X(}ld?rFz6y$S@H8-D8$fQ<yS5Q89-PvXSg8dU`{N)8<dN{daso
z%ekdsr`L%W@MVWBhr|yC(KuNXaa#v_c2FX<{S2KI?&^UR_sYI+M><zi-9V<k?Nr-9
z>zS_FsfdODVK^WRE30_8@!aQ4Kwc^CUDuerrtJlod3_>1LmG&yUgR0N&e`xE3YwL_
z^sN}aDo@J}|FmV<m2D8>Fs<+Q#7-0h$<bpOl4jM3PITAOBy~|cl%SLLoi!&W5P6ju
zBD-yqY2o;*W|vBl3!X9y&^-pN>vJtCxc2O})62iNYPN0H?uk@xb^61(*Lm`2gEv*6
ztZJ>(c%E`U*TP$9hwgQ1dMD`UmVotU2vt13LO4v}QRbsL8feOmc#d!nL}`^>hYy5p
zmWJ;>`)I@e0A7TQ>3?cxB9ke++)?OwE}W#Sy@WVYW1p+OJX9II4|AB7rbFrZw$j{s
zw`|d+VC`9tT3>2gHrt)Lj%i1~D}<eQ?VsZ|1_H6;qN?5{HuS!~T(&UNw3niH4=(+I
z=^5ny&_jw`OqySAfg6=_X>L#5I@_$<@>_w`ud%PmI-Sp>KO(jJc=e9x_R1*iS9BNs
z$T3h2-{+sn{;mvprtY<Miqq5^b`_H`^eT!)xrBPfPf?>-qfF4#U}Y)sdlmi@?kY;K
zJIwkt_pin5qH*}|tAOq}9^QxwSE-^&253oG%dZQip8ZFqN?rbleZ`b-&kVitcd5C6
zHuVv7BPj7(qQ^<I*MC7*u~g<cK`iNWKlM~kg48jF1-aZYoZx8+FpEQHvo8#MhciXz
zThU073$(*N6!@9~)T%vHwl>O@<+%KV_Ju=*L!`s6JU=dlT0t91;}d^geg-8fzt;iu
z9?VwaK^Zlx`q<)3YnH!8W?9!hcZB4SpD4dQQ_f-?EcqxUN{(uPH*Nu>9C^!R`p;wx
zuegh+r2Aaz1F_8D&$6BrCEZ2y?S3alenO<ibRT-Z+eAcb<X*o!&H<chFct&my>iJJ
z&L%SjK$;O6$(9`f{X?Hw_Qwob{WUuGyz9Ml%9Jq(ou_<$89!#-rpeYp=iOFFqek`r
zur)Q>leS-8!_OZ7kYAAct~L}S^>A^zDL!-A?%|P3$4mLFYAzhhgbK*eP(AxhibD?n
zLCuS{iuh~$G<GJpkA2}h0a`gr)9~bv9yUmrODKCHRWmU`$<i!5;}LuB`x)SSi(53I
z+Xgq|CUPIimr;xKwV4ZRTRMPBUYq-ys!$M{_z`aNWj4kY+^3WC{XP6ELxFk{hpCH1
z<zLWGfgu1J<4o^NjkF-AU6RrRVuX#p{w680O%tU2J+dY9nF-}+FT;M4<MZbt_9eU7
zTY{-+&PF5HVdCAo6?Wte<bbgxP@&l;??x;m-2+(wCd=9+;l`hjr_~!6=orLjkwd_D
zE0@XSDf5Xx1-RUw;{xEi7=HI&1_<P^@d7A$PuYILlBM@-vsgpLEQQZ(9#Orx#k6MF
zr)|6{t0s`1zXRYOofUiALW?WfW`)5OQBV`#7(3Z_3f^~fRYBtf1v{=FU4!RF{nxP=
zd3zW`Z=Rr3B+IavAjZYkOT=GJrz_-r@?|?x-oWOePxTD?cvZ1y5?`79)#y)n`!D?i
zRtf^7F3qb;${KQA!yZW!W`)*FRDl!-dhXya`+&)G8GI65tc5G;AM+LL25M!S)(!jp
zHSX+=n*0_oIC$w#*rQXUXEszY|KQKy7LbuRDp76O&Y`f)rM5XdO<u}{n_vynkiM6$
z!OsUNXNMx%!uV@uyd7h5M8e>eJ7C+X0Afo)x<_QT81ulr61e9MkvU*L;?^7b6S*&c
zK_E_{IyJRHo6YE4dzD~%Mv>sYOR_6#d`dyjiEbKu4E-uGlI?9v49V0l_C}BVU2=kM
zG3EaNqakzW=_#iJ7M4#VNom*_gYF!}z_!^7Ldx4ewRtO81vtTr`#%7&)npRv&>tA2
zCijQ^DoZ>mANiK$gEN!!OvKNKjpk>(sDl2^lvyPpuk_olB;Nsgo?gc!iLxZxq=thE
zWLFF>%e9yQ@`9Z&1Haol0l5Je;Lub3#n8RXoit*>GSpXQZ2=Xa$Ov<l<Y|;{b8n1u
zpU^zWff$|XQuDUQ(8Bsp6Uw}ROUQy>i@A+ujA%4nB-owWk2l_B=0=Ev-j}}z+h~>D
zv@&+S<EKN_Pixg3=j&n(3p1wD4?<L4O-nFsQ3nb~l(q051_a$18u)ugubv{dlBJOx
zN0-C#)cU6h5DyZ$%8EKYr|LHURU0oT8ImpqISe?gr?6<qMJL6mWS!5&XAOcsXE;G5
z4P*6q3&QFghzgu-5tgqcW$szTiyyM#{mOJg$$CjNHuXV_beubW9&udhUzAy{oZr)V
zEM+G5Zzq}YkrPCiIXq#%@8Z=aoB~6izNgy~XLFA8lMEa87EfYN%Qivzin?Z1f6*t*
z+jbcS%LYol10JMvzp(u+vOf;5^|uyy>{qbg&*vlC6jFx_7CEWb^uq}`R%mF58?pIt
z6cH?S=OPyVG#+$<f8GQ^Pw~d$3KH^BR4|y$nOK357)E}aW){UmYsu@4gG6jxE+2F%
zrGi$}WRMgvm3u5R-RU6Eg3&b?4mV;Ws26du<Cx8;t<QKT``RpDK%<a!XK{~G=AUrh
zcEkZFWRoF>FEZ!(kUnl5*c;hx$c|Bw%qkET`0-;Za1@s-1mICPGa4vtDZASLBM9cs
zPk({ARaYToe9GP?;~)T9a^NR2+FyH0U3}%RWy$CAPuv%wP`)Z168|PRjiK|3+lpdS
z_+erw=0tu5{OMG5$Es&E(IrO@eY#nG^>NFpGD)#u5!3iTz_!Shh*tV->8<);V!Tly
zzlQLH;fdzME4Xx9R-*pU$HXTBduK;uXE4`oy!0>P@MQ`r9Mr;RX4{k^a-z5&E{*Bl
zx3NI3Wd~PJo{t%0`;vpDhWb$td~=Sn1@k3zDaFp36j9q$AdBabG_+d;Vh?1XHBVft
z?$6EKaghADmYA@=sn;pf?rDH)S9GvYP8Zg|9U_`8%qzs68P)9JOF^`J+2%qk8^@HQ
zyn*y9EQ>UBtGg36$t3zliWIi*iXvLp)1&t&!<$pCU3L5lJlYP*ai`oX?|r>P)hM1}
z1~(zJ6+Hu$8gB}jiyrJb^S`+%%swpkX{;~@&FK0mGpN4wH!D}?d6uraZ(<EL#bU!#
zpYg`<p|JXbi-f(Xtn@(cFTb#o{{f(gPt)4QdyWuEp6x}ky`^W^StpHb#In`45~KOM
zn`W^^NkpW(vCY8Ab?Wbbq15je)+$whYCVCiZ}ns7S+h|u1*UN)YUO57^%8BOyYr8P
z%jnH+a283LeSs)^mBk$^k6qU?Jr93h$hpuZB7bI;ECxKJLn-O1{A|$Wl`dCLr^RMz
z;aiDkX!Ymn+?M>RgWsj&1$`fG36@_}j2sH`8heR<yzxmj5S&PPC-qb?`}85_f2J>X
zJN`ZpJP!Qr@?tjXXY{?QaY17KmEh^|>8meW@2}#2^4}WQy<Ut-{GY|x|2G)>zZPS)
z@`c@#tMLCHvqGT@`O{+Gxz#z<_&^0_-)!4xRw_q(YvPjVFA|%`VoNV0pN?ZwD3Bnx
zhO_fFDt_~Ii(_dl-kDFe{IH{J!ZObOM@4EU)9d=HA?f2kU#MPd#i4Du`#T?H!z*9-
zlDC23OLoS27(hf8h<i%!AwN%SgVL)-P=gW8?^ul(wGEKAJMe><?w02`{p^{dF_`)O
z_Q`~im5y=nT%Cr0k5*!_LSmkH``otexW)efl5$sqr0aD$RwT_Q;3Tv*3Lxz`NZ;~%
zXt??{A>c$qLo8Q`=>9UpyUEPN<`1;{{gN9B0n}j!;T?J4n-h4T9)K{xwvp7!#d4uz
z&{zoM^66SFi*3C#qgUGMd<7g%a_uSjV9PfX;`ao)Q{+qV*^2T9$zKBxyM-5Mv7W=4
zv~Upwr((yGc%^_I!K5nz!PNf&3jVn-l`O{lEtG%<{H=XO1w|8B9Eh3o0vQz{&Q1wv
zI#-+{E*r7^rbs5`a~Ax$%CRH~c=NiIryRLV9Nk0!%We}abM!0>K}{}c&mh4OhK4&1
z`ekv3oFTvluB4~w!e%AN#nB1xh&m;8eXcmgvZpKs8n|4`8hk(x9-IumTSTb|(A~7K
z<q$)G&vQm)S?wp<Oz4?dMCS-kt6P9>jK37p<wEhfUtlLQ7`XF}cHP6R&W!&7sIs;s
z4~D!i6<HV^bcY-^?6Uc3q@XdfdMk$QqC_ZrZu%PSq*df|N0+dklvI{qf3%(}(N%1b
zlu-0+IbDn0@5<=ONrQED9B7qaW)9zhEx>@-U}icCmexLdBYq$JX23Ub8wUWd78j6O
zT{Gpv60MqhFU8}dos>t!4zm9QvgVLx(*@T{?n656t191Z&b{(RYl*y*LzO4TNbvfn
zG$SZHdxHET{YOs%zuT-vJm1-_G2W^ANAo|xttg~m59nUVVa+JQ<3_U_nuIV9mTp3Q
z!v@*b9y0w8AZ*4|An@t0`t?#CHB<i!9K_H*`xLHMmWk4@h;iRKeXi(Y=vu0RZ(E6;
zAR6Nr$KS2gxmgSnyh*1Pp{h$gNb>ISq)%jd^%!LTc|<o|=qPJ;?+z*{5MP>l2yPye
z_LFh0lL<P_$zZZ~cBY=ci+ha9!tIuwvPM}e_^I8?5(@Swl@E&)D7>wRWGTt2N2x!u
znFT*XDEKMe0qb%3e>numR4Ag%V<<eH8-Ew1dqA`QkdZ{y4w1=d&~NJbo$OR73b+8_
z@hA$@2MlcM3Wk}KaT>5X`8*SR)oD)aYtsc@4d+gW>BwPlY4j8FE^6<P-iXVSb}T@Z
z$S<rSx5U%$`9OYdEYa}?A+j>aB64y^^*Ma)&l%f@Bu}v{^9{E<L}=TirPF;H8R&U|
zY|zYl?oa5>bQ%4FioC79qY60f>Q`1V2n3*>sha0^8+(y#5H&xxieRE%ch_4x6<big
z&5xpNb}*KDf~+f?`heP9b8nKCrhsdMs6osdbY>5urf%)XqOMr3KZzbz^|7Z0(4y>s
z(ASG}&h*|*D|9vzw_I$@{uM@DXCV}JIaERAOS<g9RK9)A?=4dwBWg9AMJp8&rX^Ei
z5nTe+#_(IWvE`t~CI{!E2uEz)+rxVMhZ8Bor3~gm0+J8~qeB|f9_b7I)p?D(dGj4b
zUuSjiOg|JWZFzS(C#jX{)~WFxgN^oMVNh3ifp~)^w?k2+l(56Tr1q;iN>Lu*F|Ji6
zS4ZN}(#Kz7^?@Zw_ns@Pq5jJ^%6%HBCKJw(XJChBwH;qWta22kWnbjt>!jE)%$00V
zX}Rc~s(+%V4_E`_elMQGJ0h*4X=8baxbmAn4ZcbXX(h=-$??rL+9yy;s3c8FQ{AnA
zG8mUsXL=nnyh{fjYh?kx@il2H?dE=N-C-67aodmQEJcS!c1<j@a{Z9dV>6$d*ixEU
zRMj&fXYycdr@pJTa8}b!CJG*17X-{^^fq&O>q8WtqFujWm%wJ}iG(yS-^cGJCI#2@
zx%v~ul0qfFgT{qicM$EKGy?!j86g|n03pVv!>!swdcLQkMXpN&bToCYqb?b-cMq?v
z$W8LPR|TDHCjxi2O3#1b0Th!zpU~`=`SYUa=|_Z;_^Ilp`6tR{L80B|moYFYj7Lwt
zldEsi&my&yUDK|cbhK5{eSNM+jb;k2hm>7sY(G0PBZ>P#RL7slw|pE+d06j031H}z
z)d=TM<zR3A0P&rg*yv9$4qX>y=t_BRI!sTslvB(Lu``r+TcV+rXdV|ldQ78P9a`Jv
zJH!X)Ej^>S^!?=Y%ivMtonCT1Y_V8$hsOioI0~)SaGbcolOf#&paLlm`s;t$vGns=
zS7KBnnZ2}Xk$lrN<rLN8TuDz;X}l^3_UNAbVADpt`=P?6PodQu<|KzCTs{}e>D&u$
ze=D!VPFKu6Z+KhAyV>Vy=y7tyy(XPCtfL2n*MOi-f4=~|$Am3@R2b{W`l05bX^aa;
zcU4Z=ETF=VHWot<cum664+YoSXbEVySzA@8%5afg-lW^H+vO6s5KfUZ?(Hr~;#FJ1
z_UnebDH|jR9v_F31{>7m6uUs(NK(8oE_{zf{Rw;0m@ka8GC6ZcJ{)c|E9`bm)BD_!
zN%aG_t(|OZgT?LPH$Eny0mj~}%m9&YJ@Jz{(r_>>G_<*#JW>~KvmyY~xU;m$l#Nyi
z*g7HuyZ_u=V28V?G6pz3M7*9Ah`=;?^H=yiijcfaWsNm?5#f{Br5C8kn>pC<SWKV*
z_4Cl3DSW}$dji&qr6<r3t%aYs;5hEbG2w<+s6=9=Hi~5wlH@novc;jW9R_?M)1KxO
zqdTXKklGni%)DMkfn9SSC1LvlpCb2tN{A%l699E<evnHE@Q>tfzAfx9eVs;zi)zKm
zW>;qA9)e7SvBDn0g(~xNjSfsB!o(P!-UqeqK2uh*#cJ^?FYq<O0gf1NfqTifOv>Fo
zN|JUQsSuK4b}m9;$NOp}n++w(+&K?LAXm{v%iYLI<VTxTNz|0Mt4cSvGM|0}hK{w&
zov`&sObNe~A1-0@fY%-FkDAN8CZ#!H(_NT+Lc>j+27y`S(hL*!PAPR#Io#AL+s)}*
zqD&TUs%xjls=$|C3<mOl+r>pLfTS<yEd6x4xonQi+Yf2nyjas94$3=n61Vew0AJ*5
z?1*a5-kB&ffhh`-K?53MTO-Lin>4>M!3^tjo$^nED^Z&zs=6PXn&uFK(4H@8hN^s|
zkI2UUh~zY?2pWT@9{dHBGz$zAKu0ptSanRVj`zmUO9O+uw6T`a$wk6CV*G606!m9b
zh0J*fI(J5~CQK#2esVB|>>hmkkV7ISoF5XsEH{PQ30J2!!qLZXbFhlqMAFw)!$0<D
zVL0?`7hdln!;DmRoL>IU{Ou=USzi(Qjxb3PE*6h5JETOj$#z3OGO%WTRxE99;SoNa
z+ZBZJ!|48i$`YOKW|c}T3U9z3u5`03@hwFJ(114`0ik6RRsksBQfZmJWDB={Hh0ae
zFgJdJ3(<{pc1sWJz?`WC-K4=Tw+#Ickd`<hIdL}+{NG+lV@M`Bha-twX9gS;{TU;<
zCg)j4!9KceI9MF)D<&(P8(oyy0f313S#e0b8@!@sFigO&WV5g9uX?K`mQ$a3QyD>|
zB;|l(UDV&K5^~VSeYm>3T2r@T$|C|dEZJ&I@zH;^FqjWvp(b2MSq!W;!?@#Qq>8t>
zeZmm^lEPplM9uqcNN1GzX9v?9)VA2EU@G^$T#&P0F@MT$p+QEw2er{3@z+3amzt;K
z9YU+*Wt(?+w*jX$Bml!NcmaY?$;=p>*2<VjWv_o&g2p-4wF8?hI`}iI*StiPpX~dP
z_Kp#^I-a5RyI5bzY<4BRja6zBlY_MMJ2KUNdq}DS^OKxMn{NK54S!;BUnSWd6~SQW
zqL>_%YMV|n7%AYh7j{U=7zo78=|f@ToTtCVi<D25R6(4LJB*;1h#KcWd;oC9cP~zM
zoI$~h`h<Ph;j**Gn|bXy<B32ccD}*+P3k;amMVpwC02ggioxUB1Dm{FqJh$|sfe0x
zVmX;siCyB@v3R5(b=_(3e-wYs{eV&K3}dmmYWY#o4<o8>6|?`v8l5Px?RYk(I(H2R
z_&y4Aai%kO3HQSMk(-_p7xQ^$!}vcyh6MPY;leN0sidUn<ukgnW!Yf=b=4axGVTF$
zb~h)YxLQ_UZR$WttV+%k(Xv~mz;I;EYxme$;Wx>cuCGh9_0rRi!E{?;vyl=30cU_u
zeiR?$q&-nM(V3AL(8m(IDoazbi2}niWM*nH1#V!TKRI8&Pv?BgS!PYm_Cwl~BJZXm
z9pO8B@;m843WNF7#tD|kdJN}@vn>WU()l2LRMSgJC0o>EB=79n=9~|+zO4)e?B`d|
zJDDJn50v<)Kfn|f4Th%7^)n>ETbsA|@g-v2!T5Zwx9$LBN1I(5bNGWc*@<wuB&Q@z
z&#L&BUha1WbselEVj{~t_ZILv2*+!be^ID{QEXQwe>OUOLDncf&N{m*{%&jJcct&I
zbd}7@#U}?#f6<ffi9&5S;Nflh6S~&y(SuJz@uNY)Qc$V3Z}6bH=~8m3+B4&={I{vb
zm)@<g^NHlgTaD-{3v^FSa+on}pl7+IECeS56ROdyC=>E=xC^C-;Sq8h+QwC8BbV@)
zW0=k9ZrLjNF0C||{e1n27jIJTv~qV{6yc3V>0mHFLbon#fy2A*v2m!?GaL9HO6VsD
z=4Hu6?xxGk+at_U@#7XARF-ChBA$VpX(zI~P1|g<KRAr5ZAO97%MKcb=6Fmm+aq-8
zDLzU5FzIC?MwTFWy=-TKQND83A6lS{kZ^?G=86cTOJfMSSDBYt`sAw2<iVQI;8{}I
z?&Wiuepxo)eSOsniV(YK!?+T{1I_!2U)_bn>x)3iFVKhM!qeRMIqF3=hBnKeAZZKt
za;H*p_EZZ012{8$`ITvw&{~?jZT{O3L9La;F>>9D!lX60+381SL+@$*akqINuZf-Z
zN8`Q3Z38zCh18p(ARLO%&9laXuvs6`o)m2VRfOKF3Tjta^5|73x)@ry7#b>1bIWd5
zB;MWOiSyZ~+8Z%fkmQOTx3I82QLjR&ily|I4RS3Qc?JaBA{o~$0L3n>#I*ydSuiz8
zEls?yey6&ACLqdvCq(3zriAL$J=`{f2*(5Tr3v_!_S9u_<KGUIzV{)e^kyp(w=*fC
zc=~oATQ*HXLlwsI@w=0i;34m<viE-q{jI0Hnw&mc2um2XBDqtK4nzi=pV~M(E-UtB
zEq6~&qb0PLHh7mf0EGMzeS^>>#p-EqN&{Ur>FBoaY!u;)IrWNUj@+MBoCzZc!_jfM
zsKokThc?;_)P5D@$p<rdc-6qf()V_Mlz=0fo-F`%_EIGh(cufPNsmnA<Uka-cY#xi
zIG|1?H$I7c35v%wNT;0}QG_Rd55ch5RaWxY5$v$s*`pJ!n?HWZr^~!6li7lY4n0C;
z=9cz+F4C?g#6*&6|M|JEVYtk*`5>;Rz3O$R;q?Gm?cFnUSHEbinrp#m0kG~usLe}(
z@CGfP6wGvh5PxqtKw9<h-4e|VmTCC}sm~M3Qk;fRF7P}jD4_nZH9dwJBPgRt9mNt$
z)NNuBg|rrAyMZPr;&^bQ+mQXU8tfa14lwBTB&AVUh-4^H0+GG%V8_x1O|N^;vMLy-
zV9#Jo6|e~)XzZTAvg64d5@$;sdcAy$Onat8O>n^@`ALz!xYH3!Abxazo9w<thEE)N
zB%oOw#{ICN|7y42-tPsZ`P6Np+(Z`oV)>x=w@UhcV}6(Obz>}}C;t&yk{`{W)gMV{
z-|$u?4<i1~CC-e;3!T+{7|Q#LbaAZYy4x>*PqSN$tur$7zA+^Z<GS&kR>aWjcdnvh
zo7Ht(A%=KR<3Jq8o-VmnujLv6lCuXRKfEi)J<uc}*GTq}x#p?zi>G8e!^ou#X1g!o
zq*UsVnhYsMJt}tPgtA1}ny)uR*ewc+VkTvV89Fk3WP*YAs69f(y@9WIig~g9nY4I4
zHxa-yi{czgmIHK(4ppeUu|jjiiwbW;QHfwT!gXSGnVL<NF<JfE{^hI?<e?qcwh(E^
zL*5luzX$BouR#XW4Pt|-g}F6w3}IY55%3wjST!mhsG%2r{qA;OT$eCS$)NR}{!-5Z
z&(4c;6?1hg?Fp=!S%t})y-?33{cYf(Y@(z=r|DWbXViI#8GDy7ZzWV57tac(-H@kv
zY*c4nh*OLsnw2>+)T4v{JU7qdMpG+t8jOTp>GGBX3dhU=#oGF9Wj<6leOT2*m|Z4W
zisk^NLS$OaF=+7mHm##E-_dfj7u*2GSIFacU{7lA3Pm#@%Uv^F+cT6x$Rtpl)MtN1
zmI>tl0F=V5C9Y&KjzZd2No}H_McaR9WmV|k!n38)O-QZz=~8HkHc`omskEBUKgbUd
zMOMukdWN4l&<JLwhxVIEEUnQ&9R=|$yy^k(WIgVd=h+P~_oA4nUa^VXaG!lE>ny>;
zEp|+Gl*T~Astsy*lh#i+`2t(|fg3e&dm5Ia;PDIPW7ZClCPBG5Sq?Z5GW!Ur^qS7-
z)Ca&w;xis?D#gnggzHHNPREOr4-KyW41D*Bih&d`OJg|V4d*nTg!?WpMwHZ|-V#IX
zu)xFQR1)zvE1WOfUq0_!rn*+LJ@k+gIHqTXcq&<{8)m_pV8Fyu{6e*l2^>Vfv<e~T
z%J+Hr-u)mh+-nW=n4h3D=(8}t6j{^C>USioOP?K-v-*W9W=UHb8Ll9dTo@IG_I(qL
zgwGUz{Gso4@0NnYG<ioC3*6$(FzbH=sKnqD-wI0T+q=70owJFQ(J;@dj-9bJ2j|)C
ziXXf92;~=`U4yX6<SYitn`Gw1p6*qL{r%t3Lf!MhN--KSRaFjLmZoVpdvY0s*X>C)
zA-idl)BexJRB+KKM#tjs7<%h(S$h<dJnz#QQh{8us>LDU0yU1Ba?6YKbRP1>99qq`
z%mAadh-r`^b%nVA_Uk0D!dtu@4OtBI6p~g>rDc({(Y5(;W;|PT$i&(bpI4i&5M!EP
zG4G@CNf_2q@H6F&;%OvtH+0K5s1m9Cp%#^Lsu%M@d3KXil7!u=!|kd!yJxGPW0q4B
z4T~jS7;s7%`63^DZo$*v72eiLDADeo(r515P}4EiS2|X#pAvPy%S@22irnmtF#=ON
zR9<mN47~!!y4lOOcdX(0;NDF0L@4@tU(TCf9L@lz7+Uz9IgxA1I*4sE9{jHOn#7UH
zSy8@FCHLC6Qp)U=68jE|1zw_~BOjmZ0^!fsgGTVltI{7zAzN@5CXv;FcR^XIKP0f9
z(`w>u%52hkaw=-988|Hh89N>`n0NRX4@szZDusrARjivFMl`BarI$dTMCpJg?&cmE
zt5We`sncvXr)Zrst+$e#_2VZgobP!D%xpAQdi$yJ@0J6_t#E14doIj3xb6L@7}DKs
zB)u*9vYJD@HPxunBL|2`54`UP){y=!kgm$EOkfS2y7IdsUnITbueG}t>~7tite@A<
zm6w;;b_Gl!eK2_GohP+~S%79uY2h%_{VvDT@g~RQmBkC`dpEE)As)iDO(LiU96#OW
zqQm(Nzi=J6gKM6l>N{{RoftDmING-`z&GT)lGRKfqrKx>X}bN#Q447y6aDA~>Ici=
z9&1V?t3vi9=^=Qe$}0YgblLM22Du^^)mK~@8YRXh{WB`U*7Z11&g+2$$s(whkDYx~
z4m#+n4bylm1p1u%ekWdqg6A7nr>m$N8H)uC7s|*7GcM-Jq~7nkCe>B8DDbs<(v@Gc
z!U$$G6NTNpS*_b~oNDo#|7M+~UuwU{B^twx+5|wY3<D`4RlUGB>n`3Um6$XE#oPH{
zsHUGG+a{cWM;@|9*(9jWg)y7<bFjh5MJd%qTIgd2!b+?%6xfF0^&TvZR(>ykr*vPA
z_-^aXL8Nwmq97@22hPgzxwW5HrN@&DKZ^wX&gU-R9}aAO1ptKGjO(co?|&u+i7j0V
zD+1GR$)R4|*j9`Zlor(@OgBFSibVD|*;0-BzE}J$+Tv=5j`>P(C|%rh#u!^ny#sKX
zOt%Y^Y)age+HCV(Ou&D;?agO=H>oD)HJZP(tX^o67<`(VePR0=k}Z}$X&XmF<eo17
zW&rhSp7|{^ZAM9cmpk8YglX@38?iV{M!zHL*o8X0C&}9`$yLB7Bpi~2E|pa95bvQj
z1-BtG_cMzP%uWIg!^6Hu?oOS9Cf{!NWfLVk*kKue4b;=K83oAh#->ZnWiN3nw9iZB
zZn#5h%1*u?Ezw^-L5ez4o`B4s9rFz{l$S3-Qqi^r9eX7v%Y@X4FKoC}kH0a3pA#5F
zP$IE~P1ESP|7Ir1gB>;20~-+pHuRzZ47^;ds8uH!8jne3^mVfzfM>#BE^L;&lmLLo
zaoK7Arq)(EGKv4iWJTGx|0n(y0qK}SZv+n!!eJOr1<l7TiD@~3hQh95UZ|+yA1>Ir
zh?~W3$N41?Y|Ohf+(>(cc!=1JI-Im2%)rovfF?+yBQr2Fkj6F^Gyr39hT}pJTS94<
z2X%50*3NL+RSJkUdEoUM6ygrrB(!&)qi|Fq=#4~rA#nFB;!Y3fB5;H#AhNW0s3ixB
zq(;Q6T|Iar&t)_{65s`H7NlF4R}`?~alxWv9;MMnSjCw{p~Xj%D$=?>T(QC%5QTd|
zD0<KvfE)xq4c9#$m=L*WF;0hWE>Ce|kyqg^l}#7sFeLjSi29ebE8rYVy`BgynW(k6
zXeC0m4TLuU#8XoDY2=s7>jY`V04NINhTggiBuar{<HP`PJz^Kd`5?40zEPX-`;-j<
z<~6)MW(Ok))D4dlbfu@1tZ=QaY8DLhHnx?Q(?bbj#c*yV?Z*3&_`h%_fPpBOfJ^Kp
zxw3h%mc&;Y9%Z;<fObYHu{Dxexq^CHXObElim74k1JCuCZZM0UNP;K?O4$c&IMn{w
zF(z<rs9R1*Bb7k`Wd<vB<&AV|Vw|%c?T233fKfq$9GJ#lwoH&PQV_?RFrx<I*Ar+T
zy|odx@A<I+F7_y$o7<R0cUi47)mGsuBhh4nYLyqEh;s0eoQpuIR`C#UtPQnH=6K<C
z2NLrEwSi3W7FHt6fu2a$Fj<PxXkAAL3|tzf86{+5)t%A{QsscwrP1JGQemgYa-vDs
zVJ&!oY&PX|N?J|$m8-s)aZzkY0%+|>?*c$=U==ORm-PeCfR7O3jTlWJZ6K>VmVy&1
zC_@(~5~k8(fck>KgJJp=Hk<96SV{nDD|K@yj?Ky{<#RR5=od7<X{G{M8bv91j@Ai!
z-7<!VXt~4}Yf}NDWj8%}!#9Od@-pTu41+{|5DSS_t(VNiuHfjG90FR)3*Lyu)D&?Y
z>%@PP1YbARarXfnewIR^kJNJ#rcAQpg&7b|`MbDdVk-T>_%Ay1+Xj8;RYH6&NF8YV
z#KR|%(J={LPW?qe1wn53B3Wz=#VCBG)M_A9T{U2MD9ho*Sp?(6K(od!V1-dm<(p-~
zUJmN6Xh3No-9_bKeKv7Ai;QOd52#%~gXNx3OQ@Q?>9r08JGd)GPCYvz-JYdnYAq2+
zQO$XoC~jU%u5Ms1C`zqc4JwUSh#D(QONC~Pf;diA7UltBI+J9fa7g8pTcrf85M9BN
zreX9rGXq0ek0nE7Y>Dnv+j}x6C0@v3cP>z;sFG%qI%b(?67>O<hhrE0!80X0;xi+R
z+$Hw6DXB~_5Zz-)0Ed(g)>TkTEwGWVW(0;>@5D7&KfofW<>2XNMQtvJY-wVE2V_#<
z@@{ZOyCM`fG`}V*n*?$uc?xGE>|#(mSBYRYG0U}fokL26T#|~`h~09a1}n@)<}4xg
z=EyDSc!mmh2euyAP^EffXB*}qt8y*|L=$5+uo2o8bVDwM!vt+P+Tjab2m*rJglAmY
zfFl!~Be<0~NdZ%fm`2Ul3nji`dT$8+r&5$O#+eu_5IgEuzKj3>_LLkEj3kNxcf_*+
z3YG(yoT8Iq8JGJxh`D%{o4Hc?gNT7BImks?pK$toJR^2d+O`!Gg^Hm$fd>rt=)*|9
z;mugatbL=@H_9f7dx`=*DJEns7#hdV#2Q!$r!*jYzfC>M!)jF0>Lm{>5G8GyODc(o
zoLgFB7Qn=+mT@L<qG*4~F?GnEOjg)1$Ub8-19wV5dcywz=`h-$#n?;$ju5e5S9Df7
z!kA}Z(F?i>$5=iE!&AWvn69N7LqbY$XPBS@l4G>!Y6^|qz$!&CV~Keb@N@lf1dY&3
z0}@dK@j8vRJ>ATq31?>lrLng1ag`_yLwUeeMe3ILBNor@3#xF%(gf*{+kW7vXeQwk
zhM`m?m{bY^R@UQQS%y}zEa=io(Q*+ggenV`8!L#QV~kA_zo;uJ7NRVVFtsAehQFig
z00lse_;1!`c}}^AVSK0FQ}^MB9jJH#I-J1^U?5aPGbRtD<O%4R^pxRINCVjh;~hZj
zXpTTxiM%_`I|rDuk>C7EN|S_`i7zWLwHxXVcqJC@Jew=HE;$R#YV2zguvQ#CXIm!a
z%(mssplBe2!FVB{?b_<Zr4x7!R#DMQiqa<znOCTQB^3CEy%7}zIfLJ(<``9YIbV=6
zxQ&dZEfJK`R!aG1ENCBWOrt{<O@M5cpfsc5owZQMmY}TwCdp3_Mne?`Y5H(PTBU9e
zw))gjY^R7NXu7P%1Y{e)M@mGqo?OGS@L(XJ2lWA%c;J8s7!lDD(=#RVJ_EXPLFP4X
z;%fR!M>nTralwr+!3;5FW;HP)>RMubu}aXq%vTJ`ET!Z9LruZ=MrAmS0zMp=MagkC
zOhOMg5wBmkU3<k#m2a{r;EaytqsKO=z$j%Lx#jVIAqe3BVuG<31<qd{qMI8^+>R!X
zJVCbcr%(x<lGL=DjZpXrb%=MzE`u{#lL4ql#-nhm1X|(>2-g^Rh|yoxF%>#T_>>AJ
zqawYAQ3rYIEE5aBjufh3<(YBD90UsaR1yxdI3p~ED->qJAd|?$_d1BbX_Bb1L;-BW
zJQ1cT$!j4;hB?pHWC#$`3OGwTmbx=hcL9#GDiYA>j?z5LTYJ>LCa|a&d(zEgT?P-t
z1Z*}<M!;7l9Ja7JOQ7Z<G^2ssDy2pU3j{jsZZ3`e2f0FL%(buWI)l*-D*V8Bm{bu$
z%cF4}$|l(Ob2t(9MS}gZ*#viKR5V8mC@1ux5MWD<**AEcboq{93V}_Th*hHiW&lGv
zgjo}&mnNBBUinW@wW-%A^v6w)A<vPBL{Dg@O4Tsx4>wVJFGw1A@jWEXOYLf3feI+M
z)c%9!m?(buZAWfN%&VNpR9;Q4Uqqs+@<6PPZAkS-)BYcdJ<LaFEfsi_2wg>9Z>SKV
z+m>OX6SsDiL`4%ZrDZN4Wb(k2c@0BHE=;|Kd16<zVI>9TQEr~)_PCeTvL6_+81LZJ
z^nfmjh{+7P5|p3mmgeml*o$iO4FI5sN81~quPZ7NF_aNdi1IaPUSTTXA&IyO1}8C?
zSVGe=2wB!*oy1UJoTJFkPzAEZiNkQM!Ha1uvN+L{ugI#60l)r636^qz{YPwW2*FWn
zZDABvn#9ZS<UtHkL<>l1i@8sakrfH2_vsG3IAhfaHoXjEFeD67Yw1KPYCPjIGWexD
z3>4$!ARQszF{TgGY$)FI(FV^9;%meXf>+{%&B!phR1gX>MfPig^#_e>oWw!5!zfdj
z;t6ngmLdStRta0Y?r+tb7~x=5tEg?G+P*DLZIh{_MIL=c0pW-+I;bYm;|a@0mL5&P
zHU)mAhR=zkI`K53cuJJO(BUxPjjUoh4^Wo?^kaQ~s!Xs@8W-MWqrT9uieV5a;yg>z
zG@22=h@Q)ey-ea+FBNpg2%5w~?PV}DXUx*`7>io-!4<ewCsOHA)*!v%wf3@>&IwnC
zhG^@N<~4;qiCC8fLRBT6AZCd2g-S(W!J**Be^HKtZ!Bpd9G3KM7qyj4p5+&joeaTP
z_qdh_1J$t_ymk>#8{Xg!{9WQ7URt3Q4~OtR4Uu&f)Ls&zs8zxsowyJqI!!7}klq>9
z2Hg6Jya~r}rq_i-<}1EIF2shqqoihmOhxSw;sxIS0CXU#d2TFAiV%v8B7&J*6L(}G
zCAxtWHxTtbP+^k#<~Y+KsHqgKOt~+)H3v5PWKsjkGEsFh%L3v&q^ODwT?bA`k|&oD
zyRG7EO_1r769QC{b0OsrqO!cPNd}a#rxv(0@pRM|6>vj-BBuP7m1H1dn_v2btw9&c
z3AtmLdRD6#6SD4K%qby_e{#VpK5-GGgR%{~hj~1Xk`c)+SU|gb;uFpD5B_H5X;nML
z1R=9&$|yikqX(!C2iNmo!2BLliDWqSy~^4sJceMU&MF&hQNsjoRvCyY%xO}%b%IOd
zqS*k@$621<2~yV7@mKTIw%6)$3C?4fG{6_6v2n*s9GN;ImlBOysP!~C4>5&HgG5JZ
zc;JAzjn~;0g)gZ80BACuq<BD_q`L^c3mprD*xYKQrXb6hLjM3!@|Yqj#s#CfUN5Mg
z%qTWyW2iRq@K?A;(E*$$#Jdvc2mmQ{4jKM<yKLp$c2PWQ4sWTr5uwsTCuACqrAbCs
zz7i#b(x45^%7(Y^4}cm}LmPqcQL4~WP_v+*g<9#%qpzF(A|D2a1jI64<43Sr7&)q*
zs!-mM39K6-?aQ`4Hl%=6sZzNv!r}zoGBpsGc!b6(pkh-Ua~PZ%&<RR3U?Dl!dc3hM
zq}u~#jX86DjsuoIL_o4vIrx-7e6;a3Nm@NoXr$n7IW(DBSlk|FFxKZv)X$%BaOGa1
zsE(Ru004*p!Z|Jg=i=Nk7d#-juoePNBe`lFXU(PuX#K*C!08DrP`qWPdovk`=Hl$;
z8G(u*SgrUB$|V<w06@imLEG61*hHbt2GjYUnZL&%G{p;{cTtb2&gOLsA`+i{$~%z2
z$|#4bGRB{toW0EJ%jh7lkxXT9Gbq%%BnJk}{{V9dRk?#%RFc0~!3rpfa0pcG<+$?8
znJ!in!1pPufq>M^wi204K(Krw2qj0$IZa>)nicV~2b%Kk4>^9IMxWlL9@j)R5h*b(
z3pc<^nM5OZFiM1#<oMt)T&zYKUNtFKxWrWhJfO>n2~s&s7>J6Q2q#kLQKa(EH^9)B
zEEVE-<(mglVgmmFX`XSx;yXfe7XVrKFU9^x<zE6NB0xg^2?^Ey_5)<+ieL=>$m}(j
zBEdjb6RVRK;ufBF3Fn!a;R|Adxr9tY{{Y^{u2*ao4-ecYc}#Q(U|rl3b50>g#@jHB
z!n42i3h$YwKBkcOjcK-K0a2S#@<g0Tg)S7U13x4zX(ER(TLvy!tV?#V=tm$$+{9w>
z6PtkQ-m?s%r)v@a00}k8dviGenEwE&9KQNx9v^V<d~tXK%=e6~{3Or7P;7wQbXau~
z3SiV<qmnftBh=UwK~<0s{5J@KF$)`uZx!Uk1yXQrW=Ibp#ggnPpmP+UB3em>_YSyX
z7Q1x{<g`9G0c$sDAN`n>TEMDeIAC=+O-kwthzcbPNQJj4M%XhPzRR2Q;glZt-X*z*
zqBbtKb1&mbl$jW{4!f5Zu?Zz*M4ZIs8i<bQ*odFdL2~wB7!Yj}gjtOUb0T3?#^nRO
zOgVbAT*a-S#6&Om0vo6<g9qF^;V+y#{tTOrb31-F5fEC7IZr3xrWmi{KO^B#MQw>&
z;ax%1)U$*u8$B?YEn6WQ3fO+cSW0?JouFEZiov&+;Ji_9T(X?RJU&cXO6{1z*!4Z5
z)3{96Fo;Nz7Bl<~kBE#gcz<YuqWNVVK!A$Swo*HLa?8pfGcR)U1c<HiD;9RJcMLWt
zA<e(2MhK&Hot84x(&Z7V+cN8xG61(Mwy0d}nevLFOOTA`aLOU>A_32F3k`uO2&0B)
zEL7xUxIp$W9}p&+_z31x4oO0ULx_;5kHL*a48SMz9|33vDukw03J(dyNno~Q#mNfi
z2($;<V7sq33j7cOYU*9O{W6JFPIkcUPKMYJCkX!la55IMo+U@c`;VWB`Spm9!#t51
zYnh}X{{YCE;`(I}$6-@mM-fWBt|%0|Hb)%IFhh;Twbfo_n?9!nUfDoF&oKL(WfL@L
zx>N+hGP06oAacOa3NZz51u#~+Vdmv+evtBj@e_KlvlA)q3t|8R%gHgRZVZr*Wu{RY
z_#zpTm2`q}j{z%IN(pu)RpJhflG&6-IAstoQ=f>op&aAjSrkmca{&HF=Wzs$Gev~F
z9^h9%Vj9c>D=a3Io#Bb;PyEg<j#gtx_vXDuF6-tBV>1aWL`g&}#qMRIHf5G`F*kS_
zU<SlxYFdXMeGL=`iPXspaP%l42)RWVs1)6uv4U!-ieoHBfgQQZm$b_+mIz=%V}u5Q
zPGyb;uH%5SE+_*MsFHwNm;)D*7fceV<%wJ>5|Fk9K-5NsHLHNXLC>(1QniL=JLp;W
zbp#OEvJ?X*47cr$+CJC}DeeQq`(ZUgYyw`lmHdaa0x)Glo0n;2@ZxGPAWX9AImBa+
zg{Q!X1_}I?JQIku_<SK+pzbbf_pk&UK-AY{tB54PM4ubW30MgP;uS~4+DIoXS5WrD
zjwPbW!nGNtZ3}DaD=dyNzKMK_(dfY}?Tc*)JcY8zY?P$hGWu>hTnx1WY9&j8U}?ER
zXGrxh*3>8m>MJOx=n;y>Z)ABXh9ezd1c*W0Xr&Q5Q)-+ehz{o|L}<y{9-d*8gdkS=
z{{U1Rxcsx~KBe<uBIr{F{#i9UlNCH705&F2ejE|Qa+h&SazpA?>*Damk(W~6$zd(Q
zDp?u{z6r~zdS+#r)>0UT;s|DFCX5vBrMEBO%2g?Va|sf&Ewco0%Yq;+xR8Y4p*BUD
zt@=2bU)l{oI2RXDE)OmaDpWac@5vfB8|!*t*lqYbA<IwnVpO{W)O5joMZi|3I6l!Y
zzAE@%6D0*ykWXh&X<W!xYy)g|Mkui@yNujUC@vX6{U{R|fMjLRs+`<Kf~_1%{BbPV
z#HJD=Iw9xL0u#o~QKdE9Xukdu+E4oT_)`HRXY@iC1f(OS#J>;1a5X4#EI%8yKad1l
zgfSM`OM)?`4+97cW>7{5nV75LVI%M$9l()HdnG1dS2o2PE215hF9uLbT0Q51Ij^>H
z!0l8kCoT$K=98vUoJ{sPBbD>F)hQxXbd3sL7qnRa0AL8I=8J|=&xj2KO2q_%UifXD
zOs=;t!vdaj$=o8DAqay4-65dLv6>}0mKDq<QFkg(0K2v{8jC=z5eEsmYu!!2Pf6-9
z;`=oezs^MuOH%~MZ2THH_JV~DApo*KGG18xGtC>6B0)6`_-@d}l<)XdBAgJ4K#@$g
zGMIr^P~bvjkIbTXureluEh!P)PhxUVT7nBnd0=@++}YTCA}H&QtOU2E9LgFLS;6kM
zhlUQuS*_%GNWCVCbnZ8snvd9sDod{94t`vSwQkGv>4&oDKTK@J1Ixk#v2<N@fHMNU
z{6pPU!%_8%Kn)R)Tfg-%NFf^NdyY_EN&*eeIEfR7?f@n<zjCFk4N8f3ZQt-vQhAP@
z^tw$D_0+5b9W!pToP@PvzXIVnjiRhi3KR=WG!*$kx-s&ImA`=eUE*EbJRux01r_2}
z>Q(YDETfoZR%U7oL|ekkl}xX!By0V_;71_pV=5F&A><(ffc1#0YH(30Nskbsj=F(@
zz9!5Q_CwT~7;xKg(FXZN5a(^fs3@3uAO0}{{j%x*0Fww?VO#IWju)tE6rMuQCwK)k
ziT>VZG!Hdz$e3AH9tUJpEV)Hq8FoiqD1N8vOA$^*PzAEQ%KkqEkE9*>VDLWXJD9|r
zdxGB}h_j|zu_nk)z~P9{@hruW2}E9F))`AJ$H#@g!XJkrPzT2;bPQr%RQL*#T{F!q
zGLyXrb8NoVXZ8^8A7y)CTrKP#n4YWm1L4ly_cV{{04UU@YEdZpvMd9ZV+&2ua^=Rx
zm;&fp-%`xDJqSjgBKo|eg<$N0sm>$A<^u0!w_YL#ftUFNMYp4~xoTSbc67o<inq$@
zTm&(n`99-N2WI3yXadGCe~9?MkOsbJ{8hXj(=d-bMp;=ab4^Q(P-o#xUSKF)GTlGF
zljmIEhNnLxVrs`zMsFN^8nbBE(LY}{j=ma0m}(z`_;VkF;rO=C>0zhAfB3z8FV&yo
jd?)WdAC=CZ;6Eqe{2!YJp9%gW;n(11@c#fPXrKStv$!N4

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
zcmV;9KXJfPNk&G7KL7w%MM6+kP&goZKL7x*ngE>vDhC0U06t+PjYXs)AscR1oInNy
zwg6vT1q27|{L47ss;^&t-~2EAFJxU2b(fS6NO{%&QR*x7U;dA9ztu0;UvfY3y-fdi
z|DE|A@GJJW_V3<z{|D{Qy1()sq5s_f=l}ogFa6~94gIn7>HX&TMgH&qSNC(^Pxe#)
z@BLqJ5C8t!Kfpi#>j&tcfq#(v-}uk&f4TqPy{&OS)i?Z~;k`osVfY{T-{Cy}|Cjz3
z@*mNkhrj55g8kI^2>h4%*ZJS>zNbGU|0DeecHW)-Q~s~{A7GDSexLs9{Ac7ZrI-63
z=6zKA4gX`@5Bg{JPx@ZCf35Iu{8#$V{2t&x)BnhS<o_k^ul;xa@AJNf|3m*L|DXLI
zz>o8f?ceqP#Q&b|#rvV{ar-dN;+}Tw+pUF5(e<Er!~ACuix!)U*-9`al3qoOdNoWH
zTYA4T8SJE#*W2c{qn>1wLarXKedlv*LEc4~|Ee|9>Ocp6CQDki|G7^x!RuHGP+Kcg
zGdk<1Fh06+kkP+eR5XSvABmgyR5ah*JFdO1;vjYV<DoiNG6AQWLGp0ETro%jz*8PP
z6tP5p{>DZVLPesW3{o`RZ{y@Ys^N8uAMk%bE7&KU3!;{Al(zHS&Ng)+dJp>(H<;0<
zqA^T-u>FfzikCm_@S7`4BdND_D&fr`J%*L|g>JW+;lo}Ob2iE&f~#~>)E{?h6ApxW
z_aYO<K|3n77Tt;U10X=oIhNdm4A8Q++=Ju$%HRY;-2M6KnQZE5;%LRgZ-SdsOuErl
zUDgJzByjPwwNP=e-<01v$0Fk#fn&bMEQ%I-jT!Hv_eV+$G*7Viqw&UINGz4f(NZk!
z)OmoCZ?$Nt9KS$s%@agOQ!9#XFJm&po{8Fj^?nkIoe)6L;X4x;P4(-x5~6ERvZcBL
zbtSY&tdA`@FXYhn>mye(D84p~tSfuY;L=bMW(7nm{CU=)8osNyh(L_@$Y{4@YAtVz
zvWFhZL0(C!{l@T#*iuhUInDug1GtP$!yMT{p6H@YUD<U~Cvg7TI}+ov<8ng21r)T!
zCibmjI=H)SKjWzD*br}<1U+yn4roKfdCGmB1f9}~VfqAZ;RQ?!^&7V8FzOQRzPV|B
zXG=<Wdav+mVSla^O<)nVlRvA$>cGLG@G>_=lyvZ8Nu6tW|EiU}+!ra3(y+F=b3`$d
zat7lQTwT4j?vh`ItrR!`qRKp3a3LE9reo70<9kKx(jeo0K6vbT6?<;=ABhABXXIN&
zCmMtQxAZIaJ(Lr8YSx<2%jI#v_mme3#DaW(226Wx@ERyE7~c9nJ&_#&9J)T_KK4=U
zs<w^0!M<|!B0P?pXO5}X{}A8G3{r$=JhN;9KSjoBH<Q}%rRu_dmO1PNh&n&vK+vfc
z*Eis?w-)>8oMv11G&E46`$2|F@$Mu{0Rzm_+O`WMFLr;=J_p@c;xdN$n?}H=8@~d{
z6Z|S%dL4E99l!hrT|)Q$8t#<B{uAR~aJZQvo8+_{94Ee{?@FF^FP80-Ge=_55Kd?X
zje9u)Fs{|P1~m(e+nU$f^iM+9BvMtnj7yX!KyCg5nF3L?42Q{GTj9<Sv)Jk2Gt`wN
zM~(H40%9FbR8HfiebA6#V|q<^yH7m-U;zI7*b_D@znHZn1Ps6T<n&+qQSO)rum)OQ
zOb1ImNlxnSSK?;@J-bi_9|VPx(xDxHnIHd!3`(!B?pqRb5uP-&7u4TOVkjY`qSIjl
z$1cihx9`jDnRsR_vTinm?k_r<f2-!vPnji9vzrQ|^5S#x&W5Q)oGxG2FO<5{V@t@g
zRl74c)BacQ;s`&YS7FKkW=jiqc=z!)Sqa@g6cq0;<VxNef<gMpu$2`LSh(cu5s%8O
z^7d}^JYg1)j6C8|##(D!YZb}zlR8Hn8Xb6$D3Stk`?|tFn8ox-oyx15#-air#8lCr
zx%T+r*zy}B5qQAEm|zd*^4xY7n!FG>HwZ?mm-;^u4k#(xqc;QYYI=KIvw;T*zaNyc
zyoI`J=`sYhvcg}c9}o@H@n?>LDe@nixBTjcVLO@L05pI3xwPtaQ@`zBVz`u&ho8fs
z*4ekoU<dVPG4yyiTD1lTl82xAqgu*{Am_dH)RZ-fJJLS~dC!Q#VSuG3pgUmkxD|33
z6ADoA@<jEYOD*B*J!v`bV%n^lhIkrnPGW!LpD=kvl{vdBd2^OQYM`rTN5~)eai+CC
zAOa|at)TErn^3W8-0zx%geaJ3n{iKm2juvp-)EtZQ+dcl@;yj(u9`<~i77wsD`aQ)
zo<6H(kR`Kly~gNa@b?-x8#G`2<xAFISgFi)G(-eGg1>mjt(;nbLJ#-mv_2CSJbW-`
zZ|NPC5-F6Y^!*Su?M#J%wM20=Ujv*3A*Y~HlH#GUY5tQ{W4$3S^p6--X^cJzdbtN*
z2ALL2kZo+(^an?2ZvA5Z@DA`5>%V7sdMv7`lHz#*VE35irJLz2!1ATMURS1*+CS`Y
zCD~Yl&s7ppk-fp0^;`oniCyua0h_NHnl~B5lIAMexbj)-<=hx}H_Bj($0MXjoF^gj
z#n)Za3~FEnGQERSBD)%Bo^X7$wg6-nvm=o!j}GcfEqZJay$ap+_;3qkHFJebl1yso
zkvL<Jr@UbrmzcW~i+oQ~R#3^NCdZ>W>3(0R2D7cwv&u+ab)m2Aw+{5-Z4wLvj!lb4
zcvo!**L(<?>;xk`AElMMGfvKpfBzTL3`DVZ6wFVj+x#qX+r3a}cV=;m#g5Glv?Wr&
z1MsT@XP$K2o2Gt(#1hwshm`TeRQuw`PS2Q-oLBldw!QDWr52y`m!{e3C~E0PcM<YC
zhT8u$9yfgs=C^Lp_jhgl;og&_{hOZkid=jf{SJq4rqby?Li3Bb+rbgHD6gn4L4sC?
z2!=Tjpkg6}?Icwp&&&kx_SVY}(IRd|MOET&XOR@tbHJ-FjLjMnI_+<@*N}t5)K1+w
zXiG@T>3T!Ki8KNn0Jc&<C<hNLtk$pvr88yc3*WfrpfzJYRT`H(v+{k=Km<5q7;nJ=
zXc9UE5vY|Ulyz`FVcpL<;dl-wz+9ivp?g?0uFhG}g~5y3OAKh-Bu&i{2kIDpeEa@)
z*$HWcB_+@cy(#1XuPCZnWpBU=#0*(*9uCE=m(tjSas#7~G$MdBJ^%Mfp-kZZi;#s{
zda4P!gbD<5(GPzDIfWoTPwNy{wsKTI0fQBzxVl@ANg<NZ56ri}LBvprqSjs=zk0J`
z%RxE;FUZD6>Zg$_aiWXV23`Ff(l`^5YDiYb`y(yic??wBsyYMlEsRgkkHRXAg=vc9
z>RmD+Ij8|tjC4lr9cOTdm*hw1MneHE&MtkKD6cn}RD#ot?S)jnbqvO#cm<_RcPTa2
z&fUCwImx#LX;GLo-<G)qGItb|4{cT$V#*-jqsH(4=c4z)-@2ftJBb6(6f6~DsHqaN
ztdQ_+m3GF*Nfmj5HISqQmoS4!w(VbI83G-Y=h6O&qC?oQ`=OENRFUZ>@8Go^f}&*}
z!oCUGM##XDBmtzQ`3TpA#pR%6P~a>zFm`>&0K^iDKhSOo7ib^}srZJ!4r!QLBWYD`
zO`OO)$iALx1OtMmqEi^vDLK!WJl2&;7R|HONVOYw`5bUi(1ZX8@|JpXSgDJ_tl}Rx
z=~K+84M$Q-jC}GwKD+S6TwsHfO-Pz~tKATzoeLF@d>5<2#QX)3G%FlMf~-@}bC}S+
z+`@JHcW$9%gmxjnOXNjX48Adi{gB;3s@%jN>Da~LKZEC=9dUVF6L5oh+6*C)>^!5}
z59UO&zR)UDbI#++Ai{;uR4RG$726OkxpGO1Z)<fURjqTdI=^-gMn{bu(fH?WjUjyv
zb?yicU=6}FBbX_mBQNIGm?ZU#5uoXY`u6l|8qn=L?yU>j5c#hHFrwYl5KOa%eR#BM
zHAZU-ShPD5?;l$4Kfi9=W&%2f{v|#frzSliqw>~#RHVwwWna!U4wgVW$=zwhm>{3k
z`e5hkEp%e%YA~{Su>&$TRY`D5K{!9g?VXj=dFEH{T-vc-$#8j3>j8`nBphu12QeqZ
zemOFeLd~0fU_~KdRVEjekTMk>e*>-lQjsUEio#wr2F1OGb<R*T_?I1Ls78K}Ph7Si
zzcNh*3`XH~X_jghr=p^fZl6LL1N`?_G$i`a%-ly_-i^Ono9fQYXCz<BSQ0b~UH9bq
zew6)UO{YkvxFg<FDeI-B+YCyQGZkU6r)%!yb1Y4HuO<^;auL9hLoYzbiRPv3e+L}k
z#c82y$GYq}=4S>}WhELr(v{|k7etMli7By@iWA)sBDc?hW2%C=5yhA`g%qBKqak$V
z#3XzK(M`q~Dk%{h0y!p(TGa)uY@>1w({E*Z;yiTSb30`pKg+1(NHezA@t=th+hC6U
zHD33y5bN<wN{8A)>Q?15HuoqQw+Y&SscVA+3<C8b%Os6%v>pvDijY}jOu7N`we7$G
zw~^4TVDQ<Skjo4lT2y+3EOo2ZuPYe;g>pa-0$pF#Bv%pdHmSLIAjd$xlXIri1~IY0
z7+-}-gR(H8o}8PjUurNSHB5I{q*LM=NN}quLu6jMUWH0yZN~*!bkW}b`&2qZV(BP!
z4$6=K>1f)lzLC=cV=yymj5itAXVh+54K}Pr7b)6ra$^!fzLTyOTNr}VpfC-C3sc@f
zGyc1IHk$h`h-aUfn|L%0tfjNVNoI8#K6|qmX#ab_^=BcF8gr<kMNU6{b06$n(0`Xs
z`_r6VgX3tsRpNU)TdTau&B~5QreLj2CD7mF9?1Ns;BHZz^4vB)5>Em5EGy6rw^e~G
zoktrJykO0o__gU+w>+cC<^a<2m*laj(lLB>e|Zv1(=%87$<Mj^SjXd7D>j3gLAOXN
zDl;>+X?49(D=Mstc31>_?$l*TBO74YrikXC1K~JlFPz~qdh*cOqUKlO<SScs5YiS6
zEXp)DF7J+f!*P_UTNdCNar{_r`KxMC4a%vn)WLm)eTUcgEKlcUf?4bk=bd5mQo8h4
z*`ZB1hz+%v3-z2ob}Y&3K-cBos5Z;c1|xNr3jg29mxU?VO<zLSSf|`HbJQr*sO(-)
zY-b3_U-C8Q6BMcv^ZRgfN<I*$6L3BA)hG5w%~qd<aa}g}YWT>5frGJOIUb0s$k#@&
zaQJ=%tS+!PcTx?rW$U)o)vT0RbYj}|upDM~q7)<IjlvCy8f5j|wD4uLpEg1hgDpXL
z9&?`!(`Git(V;ljDM6R>k!5+IVrs!-;3(cgIy_a@g>Ywr0HqJLE?k<f)7L{b0(%x_
z?K&s3LC@STIBpUUJv*DJQ0P$B4HmcP0;LrJ<LHZZPN4@>i@?ig$`^1hD9h4yhbY(b
zd9fn_{*_+|MZNmEd%JU83>5*NuFI~41g9f{+VO#AX9`P!w%MV7m?G|bsZYK^6ZJ93
zKxTljF2p8FPl#{{L+$lEY8URWL%t-L>LZLwLlzIj&vCu3qEKk;id{JZkMaEp@1P>c
zAQ}!dWFd^)g0nJ{wAFoJYU4}R+~;_R$V?!GIA^D3v8}IASq<OyarM3MQ^C!5J+?0X
zcGe*<lI7B1RA?cmzro_Rjku$$Kz+iyfdTE!u?CFkXY;|B8;&YgRQpYFytFJY;wz^Q
zgG)iaOMVAU&=$i74*tW|5>Hl35`{%L1)Aql5i7F4ER4I_aZlDPZ_E{MeK!G?Kyysq
zdGh0Y0p^ltyaSZ<9>Wu%!k-coCCX{$%w+CjnrJZ}Sm)Ow?)aY!(6NqjXd)mR>q}+Q
zn0F1W5vUNe)_2%}fNn4z0^%@00Jim;^#jug{BQ>*-GlikPgKku+lnn#mdZ67iKMKN
zD_QFH*e>In>0$$s8yB6o;qA+vsr{3+2m!}-h3jR#9D@l1K`+o-G{tZ7#Q`tJ>0W2f
zTGFJNg&Mochr3Qr{56pLlgm_j+MUB`D=(ErLZ=zYby5OJz@u5rz%3@Z?qI>UzC1T1
zeN*tivletXFGw`_&OpXNe=!W+zrKUY{uuV%61VcN168VVwr(ImLbnp^%2`^8sqY~m
zXW=PuPs%xx&CjQUZqPygAMiNXccnsiz~`mr9gDjN>elzSzj_;<VGI}SCiuQ5(w`DS
zPwW9L(7gVjd|gvrQ)uQB@UF~mJ)GHTL4Vpt<e-||EY;_tq>m1|(=2!OM3I1C$Q)+A
z*+EAfHWa}P+`%+ou9Foy!pt*kih%o~8%~>6bFdTp(^`I_g~<mHJ0$9a9Obe4WkLf+
zZY5f^X}bUdoT|sCuzv!ZdEI+=*4O(_3~meK?lg|s$c9z0oBx4&V#tm&Dy5YBoyA{X
z&%>mRqUV^}+7aDtdg|M@u9)S*q>H{#fl*MGkZ7kMxLG1LR*d$Bua`J@BjyKq*W;#-
z$nOh`nau&RTA*2f3y0L_mEV3Z^Zb57f_j4yAhe4A=F#BkIWsRkTP-_EguyGSiRdXZ
zIhZ?*#4AI5#;1(ma3zjf)C?g%hZrGNILN${5PDruKL4TK!6jBg>7h^jU8+2A-5Eyu
zfa#|?mL^$%xGfL4uC+m~D^ok$4+Ax_E`2AB=(Ygl6T&M`a75aGT*h|>#b$F)e}Sas
zW2tHsq+nub0~6_92-9@IB^CE?`cRaHZ)7|BP|a<-6E3kM0A&{^8*;OrcxE+??hkxU
zy=_u093sPM#}i8@eS>JKw+BX6(KE96H>?V2D^s)B?7?{I5b%js&)hvLL8pF2a_@;m
z@{^Pq4<==O(!{<irwaRlyJCaIk+r9I%r?8WgILDd|0)J%f)W1km~-tfC=oCopjxN_
z;iOSyh^_H0dVA}jm_+LxSoBJV?F7dU0?B_Qg&rnds|}MO1jeRX|C8=Mk7Z#Yi^gz%
zI2><%=(S=PlmC!qw2}DiO7OD;S8_Y^llQtmTceLqju8_ZA+*=%E3TBj8y}?dT-#&b
zUG03;P`sz_k^_0j;Nha=m<$kKMW$AVRdE`W1fo<I(LJHBy6g4Ci@3iYltLq!Td&$I
zMZ*hQTTK4jBe!ZK3&f*)2=m=%BL+4Id++GjsGzKi6dWSa@$oJeA;J8Gk8AEwE_5qP
z2Xja8xX#||LX(7ng#Y>-xQbS5?&PD%8zoTSPU2%QCcyFjd%1c?sLysyvplP}c6V4)
zAVEKs9`T(Y=rVN9vj><x=7Bgku*^_nct$*9l14;|A$Lpu``rOg%uZ!HfyQME1ngP#
zJ3VhZNU90qTMb_WU<8bGO^=RCyIdei1^~~UPbz&WueYVXOYOP?V+Y{(965V7C7Pd(
zzr@e>ZMDTKiPcmYjBDeRtGdI?<bk`?-);F#?@eBtf`f`}R;yT(%XzP}_5JHr&TXIg
zVE7%dHMlM%&cd9gnq;$b0T-IY<jqoS>FGCs^G#9C1GX*zj5*6S6oa`wA>}b>W<`)P
zi+;9D5hgnOUlaH1-B#wyHniTDdKy+WnOc8<NM+ZsQgx3gv4aO}`rzw%-(rsW4a&y}
z4D1i3G-yYV%FyG{`QYS1whyYqd>AWPb>{HP?-gYD{IW0tG2XW{yb7rp37h1@>YLj|
z24gJ{LL>7~011IEAc4WW;RzkauejEC;8N|Y1WQ21S>dI=Sk+gyPhS^r%Kc`LBl0*h
zkX&&sI-T~YutMiDJp<hgfmeM2c$%%U@ImrB-k>n@$UyOBgnVY!=(&)}Prf*=r72n_
zqBX4Z!M6YAKi%)2XMV#~aGH6%No8wPu#3ZuA|R-E%p!a|qm;RWus^f_!J-M!-?`>O
zj_jynNq@Ln1vkl^c^-*Bj2YLSHckaijedcDb(*S{f#BRnE*)H#IxD$HWc^l9ZT6@X
z#Fi7FmL+DR4@pTlX`VyZ*xf?)Zq`?@BZ8ORc{;c=>1<H)x#ynhm3&zs)&1Ykaz`Zl
zIzf%l3Tn!>;^HnC<^`Ne-sqVAVh71sdsC#0ufW$rOi#1gUR~;k880fF0A`}1wqU(4
z|MC%bH7e|RyhS>L6KU1~WsrMjN5v^{r8!CLx<X!G?Y*{|UMeri3dF^cwf_^>H2#7R
zu%D8&)PLaxV*+eN-=U(K(46boFzi@xBE181dHPEEs)t|K3aA(Hfx^N)KTARo$N`sv
z>MH_1-4YxN^GM_QZFjk_@j%|+J!nvv+wb-KMN;z5Cc=8;X>iz>@6yv>9(*y_??X{|
zhP7H_%1K`Qg2NdGzm@2!&Iu&MR_)Qt(gE+(hP2?dVx$)b{(I_Yij<j;y4RUSsG_Uv
zM(X-+ts?3`foZ{@u(}jqKYw=IIjjSkU1O6I9`t!@`NfziEV_kG)h!qfZd089w*OoU
zgj<CQzyyx+0j_*PuMfy6&q_M80N|_bf(M1Bl+Aaa2StaHV~oN(AZ;W43mnO1zsFc2
z6HR)dJ6w1joWp4D%<9U+Ouq*pV%Oqn;WB=6p8$=HH)^maI*EN{T5oN~+3T;uA;%2b
z4~ydH)?RFV-pKGk$T>2DlTlaXdLwoLrfj!C<>w&;1X7x#04gm+9jUfH#z)0VlcN&d
zpIpPTWLTh1y<Dn<x@(y>vUFYhp3#k~T0oxSCzoscq6oM?p=vtbaH~WR>^f*nvtlOV
zXmOrETeT0TwPAa{8KG$HRiR(qhXm4nYKvCH@!C&1IQ^0BSc`fzlU3+6YX$CWnI$`h
z2wttK74s~k7K!s{>XUZWfup}x1#9m%WrM~#T-HFl5qT%ZML}<g(^D!vKMK5JVbuXr
z!!%@YN)!N;Xq%E^IjkdXivQi+v<eWqm6mz07K<+`Svmyy&GX(CV)~}-XPkdk_iaG*
zpZD%5wx)8?SngGCU5JTyw!!#~^1keRhHIIZ0Eb5P_wMIStJ)zRW0cr3->2XOt%Tu7
z$3LR2_`=VrXl&G3kFYWSvFU)U;n4}E*W1|>3%;V8iq7v6u{c6#`h@|Knl<WTvW9wW
zkB2uYv8(>d%WK_tpRvHX0aJ;P{<9m6N|8_Di(Kms<rsK4HTgBGvSAe79*&omxf+kE
z#DL<+dE#mII2nNpPsvA?k&x0!7UN?D$$G>&X()U|{njOt(I|E5%>F_Xm{%88wE}L<
zo-xI_xm>eXALJ7I6?he1;x%EZ1@9rhpfTl|^?GSGUJx&`s0$(a4a5b8ErpUQu-xIj
z2%nq33mrXNoi<;Mcl$eSDXjY`<&-KN9ZQxeS%?r1HNtI1e_hRSoTNk4TkPmTu#z1_
zFNj12Lj0L*D<hl^zvW>2$IB+r_=6IF)Jh0DFeLmy-k^6&XzNzAU7nwj<AYNfugNsW
zL#~X0L$D5427r#4%UeES6c*^l=jKyGB`KY&VR<!v^7K)8LWN#DMu^4hF0LOEHPPJH
zG=Lo{dQf&RkHcxsC?ZSm)Rph^8UN#a2z2A#;vo4_4wl>&<!GswyzY={0ieU^X&p-r
zq)N|{RzFFlWe%a}B166KGI>aRF)bb_=2!{VZTxK94L4Oy!$&}P-RYq~6QxjcFl9Ul
z4Cm(DR#$%SzA(5lJ)I7jQS0rZXBlBW0JV1WdZS48x-hN(91!`*#H*>5p0RJQ;id2Z
zIC!kQ?ygQ9t=PjIlae?vxbh+-Lh42T&%>ZTZtGdT;IXAHCOjPOO|8p$c*=VV+eG|e
zp%5Z90(M|F^f9vOIvPT)w%h<*{d5_83&qLD0Kn-H*)47!%Ia*@eZY@*1LQ4_GvOj|
z(Pyy9$xlA6w0<&gAKe%^nxlVSSi|#DgI!@L7um{x%?VusM;LP?<WUNCqniL1S(wNe
z%YSrGGEOZg?I%7+%GY<?RbpJpAQ#96$iQ$|Ln4sCGiYRq@c~Hn!~jJ&1wGI5Y^T;v
zZ2L;M1o-cV)BGgf<FDyT`=W%{p;(;1B!sYU_p*=yvwUT*@y*|AOM4o2<Y83XOeRf+
z0DjUX*iTW+7$I&+tg!LASMauf7`AE~dSxC3wf41zeK#vsIaw;hh97~De+c=7ynUl^
zO^r&fIsrG8-6#OXT^@gDMHNUT^LF$0j}Go<YPgqqE3kgdS>B3ouo;#exS-7pF-*aF
z`PCNtModIm$ja-BL$%6+vr1T*Q|GpnTV4W6rp^?C4$yKHTbHtwvjEIu|CiqNE}tHz
zZVkc6;6jdvoo7C3wJ)lASQ3a@m0E|V{`f_HZRI!zoVNV3VWFNV%(?6~%SgE4=YqM<
zyX(k6MQ=So{^LGHm-T2#smyXlHeRqByNsCqj#axD(LYNRDQ;zuyAu2q?lM3(GzNRG
z6p+UeHK6|y=3-;0wO+wY)zIj>CP>gOxHQ(pfN^saQ#zOQV?`{YVz@^1K<(TNw2M>m
zn(?f$94QQ?CN)nKA*oqrl^gMf9(lrU42IX+EAI-~q(#>%49!F%=iE5DsHrB(UPObx
zr3$DP@Cvh%RQ*T#?+NpXE-llCYFa99;>GJ2N@(41)5{v$?loeGw(d}c`xiNs8|+ay
z->@P|aX`H3XT6HZ07$vNK2;)aSz`vQAN+FQZJb5qBXtQ;CX)}crmcu<s!W%mRU-Im
z0oB}Rg51pcw?8p98vlQI`xABN7<OfG9Oa~DJFR?vMc+%9FwemiF6oaB82Nf$6-{5K
z1Ek>00^ZX;P|jAMsBz*z3#MVF`FT^bS$inOvH~Ccn1X8osMPp~0_*e=OF8uomST5D
z<7BUk6`m*d7BQO{>IBv4l59);xb!qzNpITX&OZGPV_+|gWhe&eo~s0fXSs8ZAqp55
zUmD@mv@}yE@o_!MP5us@Eu5;Sg{j%sD9*TlP&qIW!s)!r>BVM5@{`$$kz+N_&=Ns;
zVJ(+g8Xk&NY2^xI_IVP?5c<lW)0_^d>x;wUsDETg6RCVJ7xz4|C}Y%p2}UdQZN#`6
zn(m}?6ZoOq&sM$6)?RWCUdDg|@$Zgfr_M<{J}WMp@v8F8<PLv9W7q=+Jjd-koE4(H
z3-!=Rjn)6a5m*9b;EjL6i8!P&F=(G6)zsjeZzQ7zV`IXR_??~t(}k|{6gA~BK6O7D
ze#NE6B}ChiipkABgk54Rn!RYV>pPGOaCAm<tyGIx(I5`fpYD^v*mmVu+{r2sjsPOh
z&gJg5*tZie7<Gono=P2d$S)(XCdfJFzU(&ad;QLDcPG-<f!irRNQJMKZx`m#)o?V(
zVsjqVK0|Bm0`-JRJBaUO>*wi>zlZSQ3d3S|2j0UF!LZT0-B>r=D(sHS0Kp~+!IK6h
z*6XeP1?~bVf-{x+2HQ2U=2P6pFIYk+Y%b!Br;9KA-eF@+!{4I@{~5*ESGU@w5e=Go
zR@-ZWC)gnfD?9<D5mWrj>3}I%=sUwTR;{g_eMq4Ebj6=2JCg4HZV~U|%VY&3tyHUS
zjU^V3AihyA@S8DZnMt|Pf^TuSnM`v3^8n|QD3wlVk8Y#MErz0Q0(1HzTJ&*Q04k!G
zVl-{HO*fMfw-h;RtAJT=umC}o0Xm{KGy;AK3Nx|d8d*axsk_^W9Qn;r9G$G6x!_;Z
zSK@q(MgU`SEJX2_nVJ2_qHE2faBO-M(Y1Fmwr(GZM(k<xVXe~G{8@H-a>Zj9PAvfd
z+hG9KRIaq@X?vRRKL<7-B*rg;7_h%x$20{FF@tgf!WK`zWD%L~hDVNjTS{wWNr;)o
zTN@-IneMe*FL3U|*yU>~nA!(5stVU8enDbqzr?@BaVYx2rJo%f=@)RhJ)p@!)rI9q
z75Y!kr{wuG`T~fQiCHKrl51wfsLc)#L<mBRk}toLz%r8llqRr?*`&FU^7j(vj3elz
zVtV}j$t@_^#G|T3KOEQpvOAy6GuCqqXES}*@>eQjZ1BWTdc$=Q5PXm{QGh-S#LHoy
z!;I1OsGchGH5T$hK*!-p_Lc5eD5rcBSCtFQLS5Y|uvmDje^Y9`NG+4S4n?-i@=Q0c
zgo`L~mPf{M^c2Djr&TECzo2G%p!S3}a8;X8%rj{A0FO}a{_v*;#_j4R(NPQFgb63e
zknnDMig4KT#ndCK4vQipw_X)`$GyWr!2U{m^Z(gjs6_X`JuJtnC*sM|-QC(>P6f_3
zIXC+uFT^~A*Y<=#N*rBx^`UexUA*hlbF?PUUm#l*vn;_W{l3n?J4WYK$@D)^3TDh3
zvgUC|FMpJZV|%7>;LzuNj&wG_n8Ed8nd0qHmq2j=e(0pFXF)EGU`9+7ssQt&W^DML
zn+2_onT|3HxYduM{JvIfD~!34CH_VILT}X4=Yb&K@&{?qJ>N5q=iiARhGd)YkoQ?a
zg2?FYv?AQ7Vv>D)kQ(8prZoMt)Mpv}5HzinI5M7Kc?xALC*Lm^(;$vo9vL{x5s+SI
z&H||EiG>v^6k-z_d%~2lOS$o*gUIKEPzC_-IbZxIs1WFB6#k}n7^Q!JF0^XNxvl7l
zd+(kBW9XJGa&EQ@pM0|+$o5uYAN!)^WaHfzs7zC3xb+j6^}oj125ozo{?FDk>LQYq
z{$&0*&f}8_-|8ec1XtYalkf1p$nrL8pXpn#wK8!|HKq}12?W?KXz$e7irN4!xVQao
zo|G;Lw<F+<I_u=rHHVmk%eNragEggw?Z(tIn!nX35m9vIqdNB>GSwOYUJLV{%CL5U
zcWEkONX!UOiDYY5AgCeJ^pGTjB!>^9(*1B$=ABZxWj;+*^eH$;-jv))pT01Es<_5h
zvW^VHI$m0cuFyavxnGfOQaM2}-ZRRw_M?qlWiciXx?@+@jwsL=A8*vT^yBu6E~Me=
zjEn^4*Lw~Gt(jl*oa*|S-BHR`3eY9h`tz8a5T_fJBFX-%ihgtvdV(DoZ6B`}7vH7e
zMs-xqaEc(PJg)gIs(MNY4cf{Vh#CR^8c?HSiXWXLmaHz4Eu=)%23V}g%O1T~jl<%c
z{EWwrDZ0Ll3tGVC4%<L*b+Dzv9qD6q;<%EhOtE^~k|)@Jb)=CZGv8RW&;(y}Glhg@
zx~&F5ZN;7*8q@gIy4=af?8g=sUw%U^vdI5S4}P!dWnW0V>|nsZtuet)7}b2dfZid2
zcV(EmA~-cDa*mFTz2*~KkDx)wJq`SJo`)`pKFRohr-U48YoSpY#>)ei)~7hrgS}}B
z5HqHQYVd&a(Qt}atpXI@oTx#gzVy32OF7%a*Bs&pGZp;!p&u@%<M0GY{S?h?8HlN8
zlMD3ld~ZCQG@Kk2$*XhnN~FPhn>s*OM$Ro8McRrDIZ&G7C4`uM8B8f8<vu`T#sM-e
zo~jLSjFkeq4!U(#*;-pm(^*-{@)~e4tS-RQ<y&Q`;h*fg$duuJ4}5)|$KFcerxh2U
z)aXL()lQZ;0##CsW_iid3#MoE%VKXZCmGL1i5b{>C_*7$6Jo1YmOZt{=V{Y_@)g&A
z{0Q0{`Ml}7wj*;QT!M<e7_Ml|tO@}$zLS@GbhxDCOUz38VKJ-j#e%5i$H?H>wFqi}
z{16yPTO<Ei{@`mWjrK$*OQHHZ*Y$s;?b0Ye-hgh%vkZHF8JevQ5O}5-EF%&5)T*WD
zQgWs)5|=D^?Mq@%gzdK{J43;>FS*8Rx>5PT=jEF|d6J5|(qD)tjGxk0!!UPLjg2}$
zr4{GCCdpwLryvKVj+jE~164u}ah!OJMlCsR3+s^a{=daETELSIr3_wX%>?hZ7ubG%
zp;keNSajP3uPR4&+?6)kxdwb10@A4E`PR|~TWC*D{;;z|wD%WKA}M}(yu$!GnRv{i
z^d5u@!^N8}c>*;9PL@I*FZuFMwBa41vq{XNpU<3|t1gz0icxeDCCOnf8~SkzP*-df
z7ZR3GP}7IY6dg4--9FTaVy$)vFT)wx*Sb>)ZD*4za>>(7b2-DRJ=}i@0Vtnt;YSnU
z312_|iwv(=D|GJ+D;09r+T7QTHErLKg!A>HpG{BQ#(yO%r4|=#tteKT%NQ2rL@Fn^
z)*IjiC(3PsE=c`}0w5_>^@%9{h&11t*b9>#5Xn9DUrRSpY3Il2RH`-*A}_E57A?yd
z8zdb5@=FL;0}~+@)tZKJc&&)K@UEI>x80e_f~z82t@_3Xl33uLbQ95D0H>41BaM2y
z#dlc1A4WExn#J7odoxY#-$xtH2hdN{NtgSv5oIB33l22t;_FdZSTD;gs){?PMX~$W
z3fL5+tG;-OngU;JM4yW^q1GBGu=?rqYrj3_bQ`5=LX%%#7CK;L$kw<GvF)=0(dM->
zdchmQHdC`z6EuCNi@p-OiI1nF0@o?j=V6}w9DUmS6p6qVv1=rgA=;;oC1$j=p;?!r
zUW0`Py!OBCW@{U%{H{*g+jxgCIU;Wka!I0hzSU7DWtD*=hd$x)VlboTa~isbJrzDH
z|BD7>p4|->*qUysj%6jZiO>tAe6u^7-^aW8s2erXmw=!XR2f18HbA0q=<RvDtT=^a
z@iW|5tqsQFmJd=D>A&BwT^uOeEFZUlw9e@Jb}t2Uag%3CY;pRHfR_IszT8=H%Dm(*
z4E#QE_>>j<(?j4qf#n{w?)Gw_2m9)UQ>-YVB%z~n&hJrre57z(di>}~VHepM+f1aJ
zV@1{);AmWhD66ONB+|jF4NDFe#TK5k*2oK7O7;jYD-{N08MUq15E&IjE;B20uK>7x
zG5f0WLo1hO2(B7$PA<8*D0{#vUX3&=lrX!o!)ZeiUM6dOCnU;{Jbog`xg_)uP~EPn
zgR*&5;Asg`^9iq)pG>L8jral56`_!_P{T!p6(H>7a3@7AXJ}(X8w|PDUKW`7Y)h;B
zKCSB<_cYomGU9YQ(xIQ&$mZxpBY>{EaiDR6+`Luy+z~&e!EIoXjV>Olk3twlpF)d=
z^r5E))K`F<e0bTMIUoHg_-DIYb-}n(<iXt(LCN7JH&8NImYOSAIi*@K)a}mW;Jrhb
zXZ{1(c&@-jaRe+Iz&Ycnt0J`;=#$JyO|!knUc;6${18$%26AbUs|Q(*JVdC7Hhyht
zY_;196c0&+CAQ<zB;kiLq}N|YfJ(dIG#mbEhH^nnWa0#XtPq<m5GJp9n<WBZ3H#OL
zVz?gBx1n4NyU3V9jlvjqvkb$^(@xh&Y@oZQwc!uO1hd_zHyIJ1<+A?8^Zv9q6;3Wb
zM-^+v0#Zea$PszYu1PL#!kx>`qDQK{k|L4nl#5y->y)bsHzB5N)qDGzxSqbG4++XJ
zP&Qq9z`Fi-T>SiEWj0>I+U=gypnh4c)Tpuhal1FS7`|2(D~TF}6sWxGBZiIx&R6J?
zfa=3=^*N5KSs2Cqmyc0=U_q~e#G9H|tUAA?NGOl+7|!rl(d`;^cyqPbb^dQ~ZIh~0
zG&8=J&t6qn68Yt+R(eY=PHdjTzCD26w(|}@YL>4Sd(GXi&?xju7TD!g=x|8u`b!$p
z^n1ay5rCpLC(pc4$Ujd(J<-2YJG8{ECsWgfEO#@^NQ=%hfcd>)CcJ^2k9sL3#}O=R
z)&1&zk%Ik_o*zWbiIjUIANlW%NW1KV2lY!-ZTPY)eTe8`JI<^338Mz78+zS>8CJ(E
z@ZNX84~oIrtYcGFqs+7bVQtY3z!Ud~XV%(xAiDr}<17UgiEmAp_mgH^l&6@LNCV<7
zFo9Sm#y=iBp1v_y1$rx{qik3N_}PKP5M2=f7aax(#T7HC0F|i8zK(Y;DDTq239xM`
z&Sxia3rje|^BCBwP8Hm!WC+xHJ8lnn1oLb+qM6TeOnv*E^SaF&dsd_s>;30I(1u-1
zXeYjg<k^4~404S_9;i*v|BM2o5js%cV9Gu?B{QsaVhQymutHQwz{Xu|)dGs<Pt_sP
ztNmmLg$>>x!MN5TK$T~L9J=nu;q`@_yEjDYx06%ytTyjoZ1SR>ZbpaQf5>kFLAT?D
z_@2jIHpwxSSmn@dYsVq70wnm<&8al9svxsPP_qmD5@dQ>@=qx%d~r9oU1r&TNKIpQ
ztp_JjDTYobLXrWKXrvg+Cm#h#D-DbnG{E>MCGAnwYV-88(ru%P_N_1d=F>h+2aD8^
zhPbu)x2<<8eKWE^^XdPu4!xvB)xv-StWv7wY8G)0QB5tGC*A^yVe$EGvS`@o=%f!5
zHfyIo`ZVOC*rGWo%oMF+bCU#zB@Z!@L*Q~wNk~%q;V$xl(6NTV^8J^L_A?yGxaT6{
zA(>c0f1!1LRs$*>lCvLoxo3vmWPj=?=B`sG{;sC!<+(Df<2d?9!7{&eN~zU+KLD%Q
zb^Tt^zotlx9uRx;Cz<@4Qil6Oq)&=tA2}>Je?Q>F;QLV#ExpKrkHK>em`9{Up)+HG
zy*$c=C%KGYl5f(6*KVB1mOG;#4(eUC{}SxnhhOM7ZHAKei(6~5u0>+h<HAX+m|O3&
z)>?-D_#>d0hX|0j`7=rtnf64KI^_Ae18g=L?jqfDE6QzqoPL7PXC+dLY+xqxJqg&m
z988QrV`BaG^hHNBWbs?yY#yU9b<{0qizd*<0enOP-jB(3t_l^Q$eo~vg_Y5*ycoA}
zf<X%W2}?tYn6ActMwHtT<C$G29qYxjW@zCPs^>Jh;Q|a+Q@JvoRDchrp%=t3P^$(=
z-s0LJe`V*gzbN_Cv3o4%AV+{dj=?n$ItjJ$)eB`Q-hL4y4UY`{<LE~~CR0a4l3bJr
z8DKLn8$t5<*pG7hc+M7I0eAHg#IO<UgvmJtKs7LtZ`&yhZ5*Em>*$(RqplL~+AUg}
zVsKkv+p|t7$tbx8#H45isUDpILt5BGF&doQQGCrX0o9zcFsyvLF=(WjVT$j(dH6ic
zd(2%N=f2WP;efn46@JW=2x5zmwbU{^p0J2Awt==U%^t{c7*baQZ4<r)sNVQ1B4bhQ
z(oP-X_KdOu!y1;79{Pe!>a*NVt#+v6D*knpSp%y}p%~5x1}uMG(_j0h_0HCGPz6`q
zXIwm)pS?%mPJUG_S~DBkMVIMNZc$^D<XSZWprj}KUu`uYJr;FCKrtZ44K=PtOcKQT
zqB=ZUnS5DV#h)@#>+6b)iy8*~=N;zZVc#luLE)%*xR}^p;mH;C&RvyZ*jS5osD?CJ
zfo&+W#rNN+gUZ?yYImv^-a)i~`{em9IiB{<WT~(iV3H-?5L*bUsL?JlyH%P@+}e^!
za&Q0zG(iUQ=qS_QQx_?>xi|C(2yzPsCsI@Z>XlF9B;3-RU`J}$plkj?PJ=NwTefcv
zW_7M0Yla@hrxo?CJj;If>E`p!NpVJ@;%ewL-7<dDJcO`CK#ooGFlqP#Es*~%kNzz;
z11b@&y88&NhE`^D(ol~K!8Ue?^icOXZ^B9?+(cy3x}wsI@gnqF`J*_c!v<P~SUN61
zXmF?_HzAkW2KAjpS~VgSurmEZ37VNxV(aap4j2QS`0UiyPltj43S`$Peb%?d4T_+_
zVN<kL18UQrS1;HkpPsK`)=<ywj+Fim7Y3Npki+q-+)C9EyXWO*QUN`;&lQS@A_0;F
zDZIW~x5qP&EnV`q5U~d^AxB*Ogz-h}uXL=$qvY*|B_X6vEwJ9*b3_=YNtLp_I+`Oo
z^g6o!5C>HXpB<S%q$}qgBs8(#0T4FJ)7E&G`7a|h0ZL1{fbdETtP}R;`{hWrgpaMD
z4WNLSkniIzBw63cTl{OfJ7JWPA=&6*RMK=cHrI4SAeM^nBMbDW63P!};wic;lE?s9
zP@+a`w|NY+6R&=W+ecN>(}Xuq4v(ZWqZ9@`(7#+5Qoyx7Ndg`YXOqwr1-X%OLaTdt
zZUpcU`fW7Q?pI+cd_oM6@tD8FO~zpl_<MXS7WE4NMv!RZh*ze#)CCa+mS;T-o5*eQ
zMU!(6jZ6`A9#A3r+itvmLgV3hB{BU>q+I-<_i^a=@LKp^hpdpM*89)}XGD&IfU?a&
zUe_C+X>nEfqr{f5Q+RAD#ISUo;3^C+;s<sywoy={))=Gd6ENl?z&7txkdIg{w!Ra=
z%lc!Zx@vYQa%oTgyhkhERPXL;+FuE-N@fMXO{i*9m3ofqMQgy)Rb}4WVrk&hLSDMk
z*$W(aVQs08c1X;9?g(zgHGGxsyiem)dSx2t(Xo>WtExea5lYX^cx?z-kGfjykr}nm
zPKK-lOXJ87_jGw;pfy|GR_GR)orW7;hAd~2kGWwk81%}V7jY+R!%G>72I6q|lIO}}
zO{lH_+P+-eCye*vTFNN%sd0CnMz`G9dx`lvr$-~+ns%V(a<uAUjD@vCcEJQ*Jh5n%
zLDmnr3k>w`LH^m5zqrW9L*Ef7n!}nBDQ{CQ_#n_|PF-MUYcu>EV9(;Asbj<Z<08?D
z)^*S`_}{NuRg6?dzs`*6SJ=iOM^WW5^34)#w0KUYU-dMyH!XJ%#j{ZvV)UX!K=QQ=
zr&!p{kqN73A&FZgfpyvc9Lo-_Re+*%2Ye-f2Eky_uj9^CHY7A)Yn8~kqtb<V$-9e8
z*4)|txH3I{VL&?A2yb#~?KJL&6eK2J51jD!EZt!b{8bFg;;hC?6w7om4Sj?Vg-FME
zb~|LPh?jXhBC#Vq5Jba_52tWR1dsUcPbB1EkZk?`h6eC^u-2(9L1Ua~deTP!BpEfB
z0;wn#ZBD@_p7m9)7gI=^=NJ$^R|~LoYnouVm|S>%ncQcKI`>x4qB7_+ryLI5;C?d2
z(PRADd0EjUabzp9#rGeb$Z+Wq-xlT?2Ju=5?Enxj(d{BJgd{h8T}Q%6AJy%EB^?t6
zJc<sEPQL{{&eGC4^Z>-pv@lfS@RSsPFx649S~Ly83bC{>|KkZtc>b?Wdv%cfH~N*Q
zSeuiHVE`&MK@UijYsJuzF3i++tGE08C|71}5YmYC;<*pj`zSr(%9epZ*-)xbif&2M
zoJj<TCRw$SB2k>cz-bv3X}{Re`?d#)3L7kaV`TILE|W>~Tp0%>2`a{v`=;OkqYEH>
zck~rGz<AWuX}YBrO-&={+bs|NEM1L6Vh?nt4^4e@1X!msF2S-^gYw60y#^f*fcmC!
zl&@>YN0Q;@y)JLb5-V6oUv3~y`2Y<xtbT(K2*&D5+77Y1x*Ma$$BJO=cl<{kWP$a4
zSA?M<+oJzO%+}6{_ZFlLtS9MN{g<Zw3sP47r*>;MO^l(#DZF`_(T73lwVXYNHU-u4
z7ZOV>S3di2d$K}fhdLC$Mkt9Xt`)+CCkH$&P7%yweNFeNB-IVxCB7x2V?5&R=kr)>
z=J;di_3$!~DY@{`0V2<e`nC^0W>&ScUo*uDbfrBBKK_c@FD5Fb)AQ(Z9Wd~Zj5x?>
zOYX@dt}C5w9IlKaU0xfWj0Rnsm~P+PML|T5GA*c}{YZLIo0CyvBBf9cU-vmvfjeB~
zJM_%EC;k}mJ1jk9K!NXz1vHc@TNsR0^8T=HjI~F!VF}4XV@^Ka)_UIOI6{(CS1MCA
zVjXS_x8r2Y=G7&~en$Sz=)AbY7MtCWRy4a$v94G0g^Zv(5qM1AP^EPDuiXm%cHW9#
zq6bgDOoeRYtrJR`ffxX=t?OqTAc7Fl-z9D`slQ`R>R2s~W1FK-!y5NWi{#E3Mdn4=
zp-t`-Xi$t?!Vb>O>`q8<Ry9~VT`(~G*tRg&k{m=UWw(ZsE^oZe|2U0k)vU|Tfb3tI
za4R9&<8u<kY;Em)p1*Ow{rOgw^Q{y$xIPreMBQyiPCKFYTf&4FGbN38Z)J~vXCjS`
zV5~Ih^ZxNUG5LD!1vZ!-__DS(CJk>~g(F9r9}9)6izY{n^tDhoDOS9WF9GQpc7xhb
zk=<M#K2ULCguds4hWjhd4Jg$J%26lNhzyqJHl0VHw+^@GQ50vemvb9x4?4~;rhHd`
z9a&?53r_LBcD}tMjn;7XSm`DiLDI}tE=4FOESf}~s6RUQj#&2a7^|E$$u2G<mt!uF
z_YE5}UCOtnQXQI+a~5_O&ou(xBAQ9_YijB`6TyREkaaHrX|oK&0tV9DFMAu*g`P`8
zCY1sdhOVaf#|e~?JDQ!6_%DYKbr&?m+3g(4-&mk4D@@$z;5lvE_ry9QeMrLgo^3%7
zwNACUqxN|%$d<u7ls{?)Y+s#XJMrI2<xn7wa<GiMHcHyU&{r1nI{P!xa`P|^1co33
zSKhY$#a3?Ltmm`8Aak!!OneV;eKtglnO!_s)2~T1i+>w6le6T-<~pb+;=!x&lOB+s
z2n<q|jSo-zjglN*r!Zi`?8b0zJUCH|O0?&2;?_Vg+{ikyvA+}O^*Au{jxL_OuZM;@
zfk*?qZEDbuxvMQBduauH%9Z?m6>IA$w-UD@h6oNz=vy-TVP6DTI)H1@cDz7^)V5i9
zDipt}ut-BWlpfU-IqFt)I8SEM9u}>`g1vhgg+|H`E$++G3j;JV0*S<@VvBCn^v@UG
zFDRat!Zk(R)k<6r3Hq5n(fTT?%O)*RG3vjT>!bV|ADJ|PbHlw#%6n4I%BJLcVV_!P
z#|3eUi#bM%3^C$`YUPQd(N)+rqQO51kfAM{1xA3$l9Q$Q7sP7c1fo7<)2fz{%W0(b
zJa~TsdEc8EZq3cwKqC7Cpgp-#Zxp$VBliISjZxp)6vh&QYXnYcxR7b5h43#=Z@tKF
z|1*ZVg<1om&xMjRAHT34n;>o5Oee(I;623uG#4+{QBZ|*H$u&ABHey!ftkK0N}B+*
zA>@!8R7Z0{bZIpsWC^qOhR_Fy@+j4ntZvVC+CD4+@-=B9IGaULhNJzvVAM!_YHiTt
z;HIzvx09zh22nZV3rVwEU#09Sr5N&uE#XW$&S`JvQqhz!yODhK7*E9Fkbo%v`B!Hp
zKg;et0so&}n?LextM{DpUe9SHLDUmqZhs=Y@f3-{I3I8f%vjjm3@U{KJQ<bQEB>l8
z*1}n2NNg}#w{CAF^Q2=#v84<H9ycLLh}X7MG5OQbRNc>K(=re|jpXM|Pl{W2L_7%A
zc8z|b;3U}YHNDvRrXQ0IP<NM=c{OtDB`UFnnvapZQcggFIxlWar-KL_Kn4y*&l%@m
zi%O{^n;t@mN9x|7$SS`YfV%6fS-H<eeb%>lmvCsd#j`G044uFzmOPf-a1`l1WU1!#
zY{aaW_nvxbH{WTMPqi=L;szX|av+Maj4CJIJOMN8&|@i5RRu5E8{U-W*|Jh2w+U|e
z9Q|0U_b4{%4Y34zY6RpgI=J6)>jHEeWBjRStQ%edsVYUrHUgunwlf(nVX!GL9EwA<
zfdl9Rmt+nb4f(9|bsegDP^DrE$$tm;j64_z5IUnKm4Hga2hGN}*2Bjf_$i_^2`QKT
z2qV=Xh#^37bGQb&=;DNUAwbpDSuLMlzJFE3)<J`|i<-!Y&dgFL>Yzc`HMoTLHS%)h
zE}i6Ngp=qHo?4NFI@I*20AuemxDYfM&;Xo=eo-WjfFpd81s*59n+8rOnfb^8$M|fc
z6h(9peD5j_`lPtEg!~^w5F*!hAnXF-6CTchnZa8jq|f9M>D7cdr}=^As_FO9Y&2So
zsL(DLqv$i*G_-($pM(_wQST@_`|FU4S1wpttUoKLroaK^VY{o`o|0ivQvkwrKf(Y2
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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
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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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&gtm.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>