- ID de l'analyse :
- 45c0eaba-bbbc-4610-9aa3-b78cdbb2d4b8Terminée
- URL soumise :
- https://blog.wtcx.dev/
- Fin du rapport :
Liens : 5 trouvé(s)
Liens sortants identifiés à partir de la page
Lien | texte |
---|---|
https://github.com/wtchangdm | Github |
https://www.linkedin.com/in/wtcx/ | |
https://x.com/wtcdm | |
https://gohugo.io/ | Hugo |
https://blowfish.page/ | Blowfish |
Variables JavaScript : 42 trouvée(s)
Les variables JavaScript globales chargées dans l'objet fenêtre d'une page sont des variables déclarées en dehors des fonctions et accessibles depuis n'importe quel endroit du code au sein du champ d'application actuel
Nom | Type |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
updateMeta | function |
getTargetAppearance | function |
mediumZoom | function |
$ | function |
jQuery | function |
gtag | function |
dataLayer | object |
Messages de journal de console : 0 trouvé(s)
Messages consignés dans la console web
HTML
Le corps HTML de la page en données brutes
<!DOCTYPE html><html lang="en" dir="ltr" class="scroll-smooth dark" data-default-appearance="dark" data-auto-appearance="false"><head><meta name="generator" content="Hugo 0.134.3"><meta charset="utf-8"><meta http-equiv="content-language" content="en"><meta name="viewport" content="width=device-width,initial-scale=1"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Middle of Nowhere</title>
<meta name="title" content="Middle of Nowhere"><meta name="description" content="Someone's life journey."><link rel="canonical" href="https://blog.wtcx.dev/"><link rel="alternate" type="application/rss+xml" href="/index.xml" title="Middle of Nowhere"><link rel="alternate" type="application/json" href="/index.json" title="Middle of Nowhere"><link type="text/css" rel="stylesheet" href="/css/main.bundle.min.a09da514dd1c9a284c8520dd5af30867b806b0caf2f139c669970fab55a8fd1251547dcbe5b0acd13d2c73f07afc9dbd716ecd73a48432cb35a2ccc2a9fe020e.css" integrity="sha512-oJ2lFN0cmihMhSDdWvMIZ7gGsMry8TnGaZcPq1Wo/RJRVH3L5bCs0T0sc/B6/J29cW7Nc6SEMss1oszCqf4CDg=="><script type="text/javascript" src="/js/appearance.min.516a16745bea5a9bd011138d254cc0fd3973cd55ce6e15f3dec763e7c7c2c7448f8fe7b54cca811cb821b0c7e12cd161caace1dd794ac3d34d40937cbcc9ee12.js" integrity="sha512-UWoWdFvqWpvQERONJUzA/TlzzVXObhXz3sdj58fCx0SPj+e1TMqBHLghsMfhLNFhyqzh3XlKw9NNQJN8vMnuEg=="></script><script defer="" type="text/javascript" id="script-bundle" src="/js/main.bundle.min.a5312a15393b6da77a379acf5b55576cabc85cb09cf0973d143812be82d0810982674c92e8564f3999e456d97305ae6f6269c41612d008359d8b94265a99eec5.js" integrity="sha512-pTEqFTk7bad6N5rPW1VXbKvIXLCc8Jc9FDgSvoLQgQmCZ0yS6FZPOZnkVtlzBa5vYmnEFhLQCDWdi5QmWpnuxQ==" data-copy="" data-copied=""></script><script src="/lib/zoom/zoom.min.37d2094687372da3f7343a221a470f6b8806f7891aa46a5a03966af7f0ebd38b9fe536cb154e6ad28f006d184b294525a7c4054b6bbb4be62d8b453b42db99bd.js" integrity="sha512-N9IJRoc3LaP3NDoiGkcPa4gG94kapGpaA5Zq9/Dr04uf5TbLFU5q0o8AbRhLKUUlp8QFS2u7S+Yti0U7QtuZvQ=="></script><style type="text/css">.medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}</style><link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"><link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"><link rel="manifest" href="/site.webmanifest"><meta property="og:url" content="https://blog.wtcx.dev/"><meta property="og:site_name" content="Middle of Nowhere"><meta property="og:title" content="Middle of Nowhere"><meta property="og:description" content="Someone’s life journey."><meta property="og:locale" content="en"><meta property="og:type" content="website"><meta name="twitter:card" content="summary"><meta name="twitter:title" content="Middle of Nowhere"><meta name="twitter:description" content="Someone’s life journey."><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","@id":"https:\/\/blog.wtcx.dev\/","name":"Middle of Nowhere","description":"Someone\u0027s life journey.","inLanguage":"en","url":"https:\/\/blog.wtcx.dev\/","publisher":{"@type":"Person","name":"W.T. Chang"}}</script><meta name="author" content="W.T. Chang"><link href="mailto:[email protected]" rel="me"><link href="https://github.com/wtchangdm" rel="me"><link href="https://www.linkedin.com/in/wtcx/" rel="me"><link href="https://x.com/wtcdm" rel="me"><link href="/index.xml" rel="me"><script src="/lib/jquery/jquery.slim.min.b0dca576e87d7eaa5850ae4e61759c065786cdb6489d68fcc82240539eebd5da522bdb4fda085ffd245808c8fe2acb2516408eb774ef26b5f6015fc6737c0ea8.js" integrity="sha512-sNylduh9fqpYUK5OYXWcBleGzbZInWj8yCJAU57r1dpSK9tP2ghf/SRYCMj+KsslFkCOt3TvJrX2AV/Gc3wOqA=="></script><script defer="" src="https://www.googletagmanager.com/gtag/js?id=G-DFWLYNHE18"></script><script>window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-DFWLYNHE18")</script><meta name="theme-color" content="rgb(30, 41, 59)"></head><body class="flex flex-col h-screen px-6 m-auto text-lg leading-7 max-w-7xl bg-neutral text-neutral-900 dark:bg-neutral-800 dark:text-neutral sm:px-14 md:px-24 lg:px-32 scrollbar-thin scrollbar-track-neutral-200 scrollbar-thumb-neutral-400 dark:scrollbar-track-neutral-800 dark:scrollbar-thumb-neutral-600"><div id="the-top" class="absolute flex self-center"><a class="px-3 py-1 text-sm -translate-y-8 rounded-b-lg bg-primary-200 focus:translate-y-0 dark:bg-neutral-600" href="#main-content"><span class="font-bold text-primary-600 ltr:pr-2 rtl:pl-2 dark:text-primary-400">↓</span>Skip to main content</a></div><div class="min-h-[148px]"></div><div class="fixed inset-x-0 pl-[24px] pr-[24px]" style="z-index:100"><div id="menu-blur" class="absolute opacity-0 inset-x-0 top-0 h-full single_hero_background nozoom bg-neutral dark:bg-neutral-800"></div><div class="relative max-w-[64rem] ml-auto mr-auto"><div style="padding-left:0;padding-right:0;padding-top:2px;padding-bottom:3px" class="main-menu flex items-center justify-between px-4 py-6 sm:px-6 md:justify-start space-x-3"><div><a href="/" class="flex"><span class="sr-only">Middle of Nowhere</span>
<img src="/img/favicon-32x32.png" width="16" height="16" class="logo max-h-[5rem] max-w-[5rem] object-scale-down object-left nozoom" alt="Middle of Nowhere"></a></div><div class="flex flex-1 items-center justify-between"><nav class="flex space-x-3"><a href="/" class="text-base font-medium text-gray-500 hover:text-gray-900">Middle of Nowhere</a></nav><nav class="hidden md:flex items-center space-x-5 md:ml-12 h-12"><a href="/posts/" class="flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400"><p class="text-base font-medium" title="">Posts</p></a><a href="/series/" class="flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400"><p class="text-base font-medium" title="">Series</p></a><a href="/categories/" class="flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400"><p class="text-base font-medium" title="">Categories</p></a><a href="/tags/" class="flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400"><p class="text-base font-medium" title="">Tags</p></a><a href="/about/" class="flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400"><p class="text-base font-medium" title="">About</p></a><button id="search-button" aria-label="Search" class="text-base hover:text-primary-600 dark:hover:text-primary-400" title="">
<span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" viewBox="0 0 512 512"><path fill="currentcolor" d="M505 442.7 405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9.0 208 0S0 93.1.0 208s93.1 208 208 208c48.3.0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9.0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7.0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7.0 128 57.2 128 128 0 70.7-57.2 128-128 128z"></path></svg></span></button><div class="ltr:mr-14 rtl:ml-14 flex items-center"><button id="appearance-switcher" aria-label="Dark mode switcher" type="button" class="text-base hover:text-primary-600 dark:hover:text-primary-400"><div class="flex items-center justify-center dark:hidden"><span class="relative block icon"><svg viewBox="0 0 512 512"><path fill="currentcolor" d="M32 256C32 132.2 132.3 32 255.8 32c11.36.0 29.7 1.668 40.9 3.746 9.616 1.777 11.75 14.63 3.279 19.44C245 86.5 211.2 144.6 211.2 207.8c0 109.7 99.71 193 208.3 172.3 9.561-1.805 16.28 9.324 10.11 16.95C387.9 448.6 324.8 480 255.8 480 132.1 480 32 379.6 32 256z"></path></svg></span></div><div class="items-center justify-center hidden dark:flex"><span class="relative block icon"><svg viewBox="0 0 512 512"><path fill="currentcolor" d="M256 159.1c-53.02.0-95.1 42.98-95.1 95.1s41.2 96.9 95.1 96.9 95.1-42.98 95.1-95.1S309 159.1 256 159.1zM509.3 347l-63.2-91.9 63.15-91.01c6.332-9.125 1.104-21.74-9.826-23.72l-109-19.7-19.7-109c-1.975-10.93-14.59-16.16-23.72-9.824L256 65.89 164.1 2.736c-9.125-6.332-21.74-1.107-23.72 9.824L121.6 121.6 12.56 141.3C1.633 143.2-3.596 155.9 2.736 164.1L65.89 256 2.74 347.01c-6.332 9.125-1.105 21.74 9.824 23.72l109 19.7 19.7 109c1.975 10.93 14.59 16.16 23.72 9.824L256 446.1l91.01 63.15c9.127 6.334 21.75 1.107 23.72-9.822l19.7-109 109-19.7C510.4 368.8 515.6 356.1 509.3 347zM256 383.1c-70.69.0-127.1-57.31-127.1-127.1.0-70.69 57.31-127.1 127.1-127.1S383.1 186.2 383.1 256c0 70.7-56.4 127.1-127.1 127.1z"></path></svg></span></div></button></div></nav><div class="flex md:hidden items-center space-x-5 md:ml-12 h-12"><span></span>
<button id="search-button-mobile" aria-label="Search" class="text-base hover:text-primary-600 dark:hover:text-primary-400" title="">
<span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" viewBox="0 0 512 512"><path fill="currentcolor" d="M505 442.7 405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9.0 208 0S0 93.1.0 208s93.1 208 208 208c48.3.0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9.0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7.0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7.0 128 57.2 128 128 0 70.7-57.2 128-128 128z"></path></svg>
</span></button>
<button id="appearance-switcher-mobile" aria-label="Dark mode switcher" type="button" class="text-base hover:text-primary-600 dark:hover:text-primary-400" style="margin-right:5px"><div class="flex items-center justify-center dark:hidden"><span class="relative block icon"><svg viewBox="0 0 512 512"><path fill="currentcolor" d="M32 256C32 132.2 132.3 32 255.8 32c11.36.0 29.7 1.668 40.9 3.746 9.616 1.777 11.75 14.63 3.279 19.44C245 86.5 211.2 144.6 211.2 207.8c0 109.7 99.71 193 208.3 172.3 9.561-1.805 16.28 9.324 10.11 16.95C387.9 448.6 324.8 480 255.8 480 132.1 480 32 379.6 32 256z"></path></svg></span></div><div class="items-center justify-center hidden dark:flex"><span class="relative block icon"><svg viewBox="0 0 512 512"><path fill="currentcolor" d="M256 159.1c-53.02.0-95.1 42.98-95.1 95.1s41.2 96.9 95.1 96.9 95.1-42.98 95.1-95.1S309 159.1 256 159.1zM509.3 347l-63.2-91.9 63.15-91.01c6.332-9.125 1.104-21.74-9.826-23.72l-109-19.7-19.7-109c-1.975-10.93-14.59-16.16-23.72-9.824L256 65.89 164.1 2.736c-9.125-6.332-21.74-1.107-23.72 9.824L121.6 121.6 12.56 141.3C1.633 143.2-3.596 155.9 2.736 164.1L65.89 256 2.74 347.01c-6.332 9.125-1.105 21.74 9.824 23.72l109 19.7 19.7 109c1.975 10.93 14.59 16.16 23.72 9.824L256 446.1l91.01 63.15c9.127 6.334 21.75 1.107 23.72-9.822l19.7-109 109-19.7C510.4 368.8 515.6 356.1 509.3 347zM256 383.1c-70.69.0-127.1-57.31-127.1-127.1.0-70.69 57.31-127.1 127.1-127.1S383.1 186.2 383.1 256c0 70.7-56.4 127.1-127.1 127.1z"></path></svg></span></div></button></div></div><div class="-my-2 -mr-2 md:hidden"><label id="menu-button" class="block"><div class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400"><span class="relative block icon"><svg viewBox="0 0 448 512"><path fill="currentcolor" d="M0 96C0 78.33 14.33 64 32 64H416c17.7.0 32 14.33 32 32 0 17.7-14.3 32-32 32H32C14.33 128 0 113.7.0 96zM0 256c0-17.7 14.33-32 32-32H416c17.7.0 32 14.3 32 32s-14.3 32-32 32H32c-17.67.0-32-14.3-32-32zM416 448H32c-17.67.0-32-14.3-32-32s14.33-32 32-32H416c17.7.0 32 14.3 32 32s-14.3 32-32 32z"></path></svg></span></div><div id="menu-wrapper" style="padding-top:5px" class="fixed inset-0 z-30 invisible w-screen h-screen m-0 overflow-auto transition-opacity opacity-0 cursor-default bg-neutral-100/50 backdrop-blur-sm dark:bg-neutral-900/50"><ul class="flex space-y-2 mt-3 flex-col items-end w-full px-6 py-6 mx-auto overflow-visible list-none ltr:text-right rtl:text-left max-w-7xl"><li id="menu-close-button"><span class="cursor-pointer inline-block align-text-bottom hover:text-primary-600 dark:hover:text-primary-400"><span class="relative block icon"><svg viewBox="0 0 320 512"><path fill="currentcolor" d="M310.6 361.4c12.5 12.5 12.5 32.75.0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3 54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75.0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75.0-45.25s32.75-12.5 45.25.0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25.0s12.5 32.75.0 45.25l-105.4 105.4L310.6 361.4z"></path></svg></span></span></li><li class="mt-1"><a href="/posts/" class="flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400"><p class="text-bg font-bg" title="">Posts</p></a></li><li class="mt-1"><a href="/series/" class="flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400"><p class="text-bg font-bg" title="">Series</p></a></li><li class="mt-1"><a href="/categories/" class="flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400"><p class="text-bg font-bg" title="">Categories</p></a></li><li class="mt-1"><a href="/tags/" class="flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400"><p class="text-bg font-bg" title="">Tags</p></a></li><li class="mt-1"><a href="/about/" class="flex items-center text-gray-500 hover:text-primary-600 dark:hover:text-primary-400"><p class="text-bg font-bg" title="">About</p></a></li></ul></div></label></div></div></div></div><script>window.addEventListener("scroll",function(){var t=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,n=document.getElementById("menu-blur");n.style.opacity=t/300})</script><div class="relative flex flex-col grow"><main id="main-content" class="grow"><article class="max-w-full prose dark:prose-invert"><div class="relative"><div class="absolute inset-x-0 bottom-0 h-1/2 bg-gray-100"></div><div class="mx-auto max-w-7xl p-0"><div class="relative sm:overflow-hidden"><div class="fixed inset-x-0 top-0" style="z-index:-10"></div><div class="relative px-1 py-1 flex flex-col items-center justify-center text-center"><img class="mb-2 rounded-full h-36 w-36 medium-zoom-image" width="144" height="144" alt="W.T. Chang" src="/img/avatar.webp"><h1 class="mb-2 text-4xl font-extrabold text-neutral-800 dark:text-neutral-200">W.T. Chang</h1><div class="mt-3 mb-10 text-2xl"><div class="flex flex-wrap"><a class="px-1 hover:text-primary-400 text-primary-800 dark:text-primary-200" href="mailto:[email protected]" target="_blank" aria-label="Email" rel="me noopener noreferrer"><span class="relative block icon"><svg viewBox="0 0 512 512"><path fill="currentcolor" d="M207.8 20.73c-93.45 18.32-168.7 93.66-187 187.1-27.64 140.9 68.65 266.2 199.1 285.1 19.01 2.888 36.17-12.26 36.17-31.49l1e-4-.6631c0-15.74-11.44-28.88-26.84-31.24-84.35-12.98-149.2-86.13-149.2-174.2.0-102.9 88.61-185.5 193.4-175.4 91.54 8.869 158.6 91.25 158.6 183.2v16.16c0 22.09-17.94 40.05-40 40.05s-40.01-17.96-40.01-40.05v-120.1c0-8.847-7.161-16.02-16.01-16.02l-31.98.0036c-7.299.0-13.2 4.992-15.12 11.68-24.85-12.15-54.24-16.38-86.06-5.106-38.75 13.73-68.12 48.91-73.72 89.64-9.483 69.01 43.81 128 110.9 128 26.44.0 50.43-9.544 69.59-24.88 24 31.3 65.23 48.69 109.4 37.49C465.2 369.3 496 324.1 495.1 277.2V256.3c0-149.2-133.9-265.632-287.3-235.57zM239.1 304.3c-26.47.0-48-21.56-48-48.05s21.53-48.05 48-48.05 48 21.56 48 48.05-20.6 48.05-48 48.05z"></path></svg>
</span></a><a class="px-1 hover:text-primary-400 text-primary-800 dark:text-primary-200" href="https://github.com/wtchangdm" target="_blank" aria-label="Github" rel="me noopener noreferrer"><span class="relative block icon"><svg viewBox="0 0 496 512"><path fill="currentcolor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6.0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6.0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3.0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1.0-6.2-.3-40.4-.3-61.4.0.0-70 15-84.7-29.8.0.0-11.4-29.1-27.8-36.6.0.0-22.9-15.7 1.6-15.4.0.0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5.0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9.0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4.0 33.7-.3 75.4-.3 83.6.0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6.0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9.0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg>
</span></a><a class="px-1 hover:text-primary-400 text-primary-800 dark:text-primary-200" href="https://www.linkedin.com/in/wtcx/" target="_blank" aria-label="Linkedin" rel="me noopener noreferrer"><span class="relative block icon"><svg viewBox="0 0 448 512"><path fill="currentcolor" d="M416 32H31.9C14.3 32 0 46.5.0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6.0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3.0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2.0 38.5 17.3 38.5 38.5.0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6.0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2.0 79.7 44.3 79.7 101.9V416z"></path></svg>
</span></a><a class="px-1 hover:text-primary-400 text-primary-800 dark:text-primary-200" href="https://x.com/wtcdm" target="_blank" aria-label="Twitter" rel="me noopener noreferrer"><span class="relative block icon"><svg viewBox="0 0 512 512"><path fill="currentcolor" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645.0 138.72-105.583 298.558-298.558 298.558-59.452.0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055.0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421.0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391.0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04.0-57.828 46.782-104.934 104.934-104.934 30.213.0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path></svg>
</span></a><a class="px-1 hover:text-primary-400 text-primary-800 dark:text-primary-200" href="/index.xml" target="_blank" aria-label="Rss" rel="me noopener noreferrer"><span class="relative block icon"><svg viewBox="0 0 448 512"><path fill="currentcolor" d="M0 64C0 46.3 14.3 32 32 32c229.8.0 416 186.2 416 416 0 17.7-14.3 32-32 32s-32-14.3-32-32C384 253.6 226.4 96 32 96 14.3 96 0 81.7.0 64zM128 416c0 35.3-28.7 64-64 64S0 451.3.0 416s28.7-64 64-64 64 28.7 64 64zM32 160c159.1.0 288 128.9 288 288 0 17.7-14.3 32-32 32s-32-14.3-32-32c0-123.7-100.3-224-224-224-17.7.0-32-14.3-32-32s14.3-32 32-32z"></path></svg></span></a></div></div><section class="prose dark:prose-invert"><p>Someone’s life journey.</p></section></div></div></div></div></article><section><h2 class="mt-8 text-2xl font-extrabold mb-10">Recent</h2><section class="w-full grid gap-4 sm:grid-cols-2 md:grid-cols-3"><a href="/posts/2024/04/27/lessons-learned-building-dns-resolver/" class="min-w-full"><div class="min-h-full border border-neutral-200 dark:border-neutral-700 border-2 rounded overflow-hidden shadow-2xl relative"><div class="w-full thumbnail_card nozoom" style="background-image:url(/posts/2024/04/27/lessons-learned-building-dns-resolver/featured-image.webp)"></div><div class="px-6 py-4"><div class="font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral" href="/posts/2024/04/27/lessons-learned-building-dns-resolver/">Lessons Learned When Building My DNS Resolver</div><div class="text-sm text-neutral-500 dark:text-neutral-400"><div class="flex flex-row flex-wrap items-center"><time datetime="2024-04-27T21:50:39+08:00">April 27, 2024</time><span class="px-2 text-primary-500">·</span><span>3288 words</span><span class="px-2 text-primary-500">·</span><span title="Reading time">16 mins</span></div><div class="flex flex-row flex-wrap items-center"></div><div class="flex flex-row flex-wrap items-center"><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/dev/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Dev
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/networking/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Networking
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/dns/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">DNS
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/rust/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Rust</span></span></span></div></div></div><div class="px-6 pt-4 pb-2"></div></div></a><a href="/posts/2023/11/02/advent-of-code-2023-using-rust/" class="min-w-full"><div class="min-h-full border border-neutral-200 dark:border-neutral-700 border-2 rounded overflow-hidden shadow-2xl relative"><div class="w-full thumbnail_card nozoom" style="background-image:url(/posts/2023/11/02/advent-of-code-2023-using-rust/featured-image.webp)"></div><div class="px-6 py-4"><div class="font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral" href="/posts/2023/11/02/advent-of-code-2023-using-rust/">Advent of Code 2023 Using Rust</div><div class="text-sm text-neutral-500 dark:text-neutral-400"><div class="flex flex-row flex-wrap items-center"><time datetime="2023-12-02T16:51:24+08:00">December 2, 2023</time><span class="px-2 text-primary-500">·</span><span>2233 words</span><span class="px-2 text-primary-500">·</span><span title="Reading time">11 mins</span></div><div class="flex flex-row flex-wrap items-center"></div><div class="flex flex-row flex-wrap items-center"><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/dev/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Dev
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/rust/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Rust
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/adventofcode/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">AdventOfCode</span></span></span></div></div></div><div class="px-6 pt-4 pb-2"></div></div></a><a href="/posts/2023/09/23/troubleshooting-connection-reset-incident/" class="min-w-full"><div class="min-h-full border border-neutral-200 dark:border-neutral-700 border-2 rounded overflow-hidden shadow-2xl relative"><div class="w-full thumbnail_card nozoom" style="background-image:url(/posts/2023/09/23/troubleshooting-connection-reset-incident/featured-image.webp)"></div><div class="px-6 py-4"><div class="font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral" href="/posts/2023/09/23/troubleshooting-connection-reset-incident/">Troubleshooting the Connection Reset Incident</div><div class="text-sm text-neutral-500 dark:text-neutral-400"><div class="flex flex-row flex-wrap items-center"><time datetime="2023-09-23T15:40:16+08:00">September 23, 2023</time><span class="px-2 text-primary-500">·</span><span>1710 words</span><span class="px-2 text-primary-500">·</span><span title="Reading time">9 mins</span></div><div class="flex flex-row flex-wrap items-center"></div><div class="flex flex-row flex-wrap items-center"><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/dev/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Dev
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/ops/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Ops
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/kubernetes/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Kubernetes
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/networking/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Networking</span></span></span></div></div></div><div class="px-6 pt-4 pb-2"></div></div></a><a href="/posts/2023/07/15/getting-started-with-grafana-loki-up-and-running/" class="min-w-full"><div class="min-h-full border border-neutral-200 dark:border-neutral-700 border-2 rounded overflow-hidden shadow-2xl relative"><div class="w-full thumbnail_card nozoom" style="background-image:url(/posts/2023/07/15/getting-started-with-grafana-loki-up-and-running/featured-image.webp)"></div><div class="px-6 py-4"><div class="font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral" href="/posts/2023/07/15/getting-started-with-grafana-loki-up-and-running/">Getting Started with Grafana Loki, Part 2: Up and Running</div><div class="text-sm text-neutral-500 dark:text-neutral-400"><div class="flex flex-row flex-wrap items-center"><time datetime="2023-07-15T22:57:52+08:00">July 15, 2023</time><span class="px-2 text-primary-500">·</span><span>2874 words</span><span class="px-2 text-primary-500">·</span><span title="Reading time">14 mins</span></div><div class="flex flex-row flex-wrap items-center"></div><div class="flex flex-row flex-wrap items-center"><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/dev/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Dev
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/ops/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Ops
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/observability/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Observability
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/kubernetes/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Kubernetes
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/container/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Container
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/logging/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Logging
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/grafana/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Grafana
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/grafana-loki/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Grafana Loki
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/aws/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">AWS
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/ec2/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">EC2
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/s3/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">S3</span></span></span></div></div></div><div class="px-6 pt-4 pb-2"></div></div></a><a href="/posts/2022/07/09/automatically-clean-up-dangling-jobs-with-policy-engine/" class="min-w-full"><div class="min-h-full border border-neutral-200 dark:border-neutral-700 border-2 rounded overflow-hidden shadow-2xl relative"><div class="w-full thumbnail_card nozoom" style="background-image:url(/posts/2022/07/09/automatically-clean-up-dangling-jobs-with-policy-engine/featured-image.webp)"></div><div class="px-6 py-4"><div class="font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral" href="/posts/2022/07/09/automatically-clean-up-dangling-jobs-with-policy-engine/">Automatically Clean Up Dangling Jobs with Policy Engine</div><div class="text-sm text-neutral-500 dark:text-neutral-400"><div class="flex flex-row flex-wrap items-center"><time datetime="2022-07-09T21:16:48+08:00">July 9, 2022</time><span class="px-2 text-primary-500">·</span><span>1332 words</span><span class="px-2 text-primary-500">·</span><span title="Reading time">7 mins</span></div><div class="flex flex-row flex-wrap items-center"></div><div class="flex flex-row flex-wrap items-center"><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/ops/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Ops
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/kubernetes/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Kubernetes
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/container/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Container
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/policy-engine/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Policy Engine
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/kyverno/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Kyverno</span></span></span></div></div></div><div class="px-6 pt-4 pb-2"></div></div></a><a href="/posts/2022/05/02/getting-started-with-grafana-loki-the-concepts/" class="min-w-full"><div class="min-h-full border border-neutral-200 dark:border-neutral-700 border-2 rounded overflow-hidden shadow-2xl relative"><div class="w-full thumbnail_card nozoom" style="background-image:url(/posts/2022/05/02/getting-started-with-grafana-loki-the-concepts/featured-image.webp)"></div><div class="px-6 py-4"><div class="font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral" href="/posts/2022/05/02/getting-started-with-grafana-loki-the-concepts/">Getting Started with Grafana Loki, Part 1: The Concepts</div><div class="text-sm text-neutral-500 dark:text-neutral-400"><div class="flex flex-row flex-wrap items-center"><time datetime="2022-05-02T00:08:45+08:00">May 2, 2022</time><span class="px-2 text-primary-500">·</span><span>2638 words</span><span class="px-2 text-primary-500">·</span><span title="Reading time">13 mins</span></div><div class="flex flex-row flex-wrap items-center"></div><div class="flex flex-row flex-wrap items-center"><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/dev/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Dev
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/ops/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Ops
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/observability/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Observability
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/kubernetes/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Kubernetes
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/container/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Container
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/logging/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Logging
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/grafana/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Grafana
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/grafana-loki/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Grafana Loki
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/cloudwatch-logs/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">CloudWatch Logs
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/s3/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">S3</span></span></span></div></div></div><div class="px-6 pt-4 pb-2"></div></div></a><a href="/posts/2022/04/29/how-it-works-cluster-log-shipper-as-a-daemonset/" class="min-w-full"><div class="min-h-full border border-neutral-200 dark:border-neutral-700 border-2 rounded overflow-hidden shadow-2xl relative"><div class="w-full thumbnail_card nozoom" style="background-image:url(/posts/2022/04/29/how-it-works-cluster-log-shipper-as-a-daemonset/featured-image.webp)"></div><div class="px-6 py-4"><div class="font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral" href="/posts/2022/04/29/how-it-works-cluster-log-shipper-as-a-daemonset/">How It Works: Cluster Log Shipper as a DaemonSet</div><div class="text-sm text-neutral-500 dark:text-neutral-400"><div class="flex flex-row flex-wrap items-center"><time datetime="2022-04-29T22:38:57+08:00">April 29, 2022</time><span class="px-2 text-primary-500">·</span><span>993 words</span><span class="px-2 text-primary-500">·</span><span title="Reading time">5 mins</span></div><div class="flex flex-row flex-wrap items-center"></div><div class="flex flex-row flex-wrap items-center"><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/dev/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Dev
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/ops/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Ops
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/eli5/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">ELI5
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/observability/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Observability
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/kubernetes/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Kubernetes
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/container/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Container
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/logging/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Logging
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/automation/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Automation</span></span></span></div></div></div><div class="px-6 pt-4 pb-2"></div></div></a><a href="/posts/2022/03/27/monitor-bandwidth/" class="min-w-full"><div class="min-h-full border border-neutral-200 dark:border-neutral-700 border-2 rounded overflow-hidden shadow-2xl relative"><div class="w-full thumbnail_card nozoom" style="background-image:url(/posts/2022/03/27/monitor-bandwidth/featured-image.webp)"></div><div class="px-6 py-4"><div class="font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral" href="/posts/2022/03/27/monitor-bandwidth/">Monitor your bandwidth</div><div class="text-sm text-neutral-500 dark:text-neutral-400"><div class="flex flex-row flex-wrap items-center"><time datetime="2022-03-27T19:57:38+08:00">March 27, 2022</time><span class="px-2 text-primary-500">·</span><span>902 words</span><span class="px-2 text-primary-500">·</span><span title="Reading time">5 mins</span></div><div class="flex flex-row flex-wrap items-center"></div><div class="flex flex-row flex-wrap items-center"><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/ops/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Ops
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/observability/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Observability
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/aws/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">AWS
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/ec2/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">EC2
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/redis/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Redis
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/networking/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Networking</span></span></span></div></div></div><div class="px-6 pt-4 pb-2"></div></div></a><a href="/posts/2021/06/20/the-making-of-admission-webhooks-part-2-the-implementation/" class="min-w-full"><div class="min-h-full border border-neutral-200 dark:border-neutral-700 border-2 rounded overflow-hidden shadow-2xl relative"><div class="w-full thumbnail_card nozoom" style="background-image:url(/posts/2021/06/20/the-making-of-admission-webhooks-part-2-the-implementation/featured-image.webp)"></div><div class="px-6 py-4"><div class="font-bold text-xl text-neutral-800 decoration-primary-500 hover:underline hover:underline-offset-2 dark:text-neutral" href="/posts/2021/06/20/the-making-of-admission-webhooks-part-2-the-implementation/">The Making of Admission Webhooks, Part 2: The Implementation</div><div class="text-sm text-neutral-500 dark:text-neutral-400"><div class="flex flex-row flex-wrap items-center"><time datetime="2021-06-20T18:21:29+08:00">June 20, 2021</time><span class="px-2 text-primary-500">·</span><span>1611 words</span><span class="px-2 text-primary-500">·</span><span title="Reading time">8 mins</span></div><div class="flex flex-row flex-wrap items-center"></div><div class="flex flex-row flex-wrap items-center"><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/dev/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Dev
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/categories/ops/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Ops
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/kubernetes/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Kubernetes
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/admission-webhook/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Admission Webhook
</span></span></span><span style="margin-top:.5rem" class="mr-2" onclick="window.open("/tags/node.js/","_self")"><span class="flex" style="cursor:pointer"><span class="rounded-md border border-primary-400 px-1 py-[1px] text-xs font-normal text-primary-700 dark:border-primary-600 dark:text-primary-400">Node.js</span></span></span></div></div></div><div class="px-6 pt-4 pb-2"></div></div></a></section><div class="mt-10 flex justify-center"><a href="/posts/"><button class="bg-transparent hover:text-primary-500 prose dark:prose-invert font-semibold hover:text-white py-2 px-4 border border-primary-500 hover:border-transparent rounded">
Show More</button></a></div></section><div id="top-scroller" class="pointer-events-none absolute top-[110vh] bottom-0 w-12 ltr:right-0 rtl:left-0"><a href="#the-top" class="pointer-events-auto sticky top-[calc(100vh-5.5rem)] flex h-12 w-12 mb-16 items-center justify-center rounded-full bg-neutral/50 text-xl text-neutral-700 hover:text-primary-600 dark:bg-neutral-800/50 dark:text-neutral dark:hover:text-primary-400" aria-label="Scroll to top" title="Scroll to top">↑</a></div></main><footer id="site-footer" class="py-10 print:hidden"><div class="flex items-center justify-between"><p class="text-sm text-neutral-500 dark:text-neutral-400">©
2024
W.T. Chang</p><p class="text-xs text-neutral-500 dark:text-neutral-400">Powered by <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href="https://gohugo.io/" target="_blank" rel="noopener noreferrer">Hugo</a> & <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href="https://blowfish.page/" target="_blank" rel="noopener noreferrer">Blowfish</a></p></div><script>mediumZoom(document.querySelectorAll("img:not(.nozoom)"),{margin:24,background:"rgba(0,0,0,0.5)",scrollOffset:0})</script><script type="text/javascript" src="/js/process.min.cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e.js" integrity="sha512-z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvY7kxvUdBeoGlODJ6+SfaPg=="></script></footer><div id="search-wrapper" class="invisible fixed inset-0 flex h-screen w-screen cursor-default flex-col bg-neutral-500/50 p-4 backdrop-blur-sm dark:bg-neutral-900/50 sm:p-6 md:p-[10vh] lg:p-[12vh]" data-url="https://blog.wtcx.dev/" style="z-index:500"><div id="search-modal" class="flex flex-col w-full max-w-3xl min-h-0 mx-auto border rounded-md shadow-lg top-20 border-neutral-200 bg-neutral dark:border-neutral-700 dark:bg-neutral-800"><header class="relative z-10 flex items-center justify-between flex-none px-2"><form class="flex items-center flex-auto min-w-0"><div class="flex items-center justify-center w-8 h-8 text-neutral-400"><span class="relative block icon"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" viewBox="0 0 512 512"><path fill="currentcolor" d="M505 442.7 405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9.0 208 0S0 93.1.0 208s93.1 208 208 208c48.3.0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9.0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7.0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7.0 128 57.2 128 128 0 70.7-57.2 128-128 128z"></path></svg></span></div><input type="search" id="search-query" class="flex flex-auto h-12 mx-1 bg-transparent appearance-none focus:outline-dotted focus:outline-2 focus:outline-transparent" placeholder="Search" tabindex="0"></form><button id="close-search-button" class="flex items-center justify-center w-8 h-8 text-neutral-700 hover:text-primary-600 dark:text-neutral dark:hover:text-primary-400" title="Close (Esc)">
<span class="relative block icon"><svg viewBox="0 0 320 512"><path fill="currentcolor" d="M310.6 361.4c12.5 12.5 12.5 32.75.0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3 54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75.0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75.0-45.25s32.75-12.5 45.25.0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25.0s12.5 32.75.0 45.25l-105.4 105.4L310.6 361.4z"></path></svg></span></button></header><section class="flex-auto px-2 overflow-auto"><ul id="search-results"></ul></section></div></div></div><!-- Cloudflare Pages Analytics --><script defer="" src="https://static.cloudflareinsights.com/beacon.min.js" data-cf-beacon="{"token": "754a9f872a864f0b9c38931dac1cc2a7"}"></script><!-- Cloudflare Pages Analytics --></body></html>