- Scan ID:
- 45c0eaba-bbbc-4610-9aa3-b78cdbb2d4b8Finished
- Submitted URL:
- https://blog.wtcx.dev/
- Report Finished:
Links · 5 found
The outgoing links identified from the page
Link | Text |
---|---|
https://github.com/wtchangdm | Github |
https://www.linkedin.com/in/wtcx/ | |
https://x.com/wtcdm | |
https://gohugo.io/ | Hugo |
https://blowfish.page/ | Blowfish |
JavaScript Variables · 42 found
Global JavaScript variables loaded on the window object of a page, are variables declared outside of functions and accessible from anywhere in the code within the current scope
Name | Type |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
updateMeta | function |
getTargetAppearance | function |
mediumZoom | function |
$ | function |
jQuery | function |
gtag | function |
dataLayer | object |
Console log messages · 0 found
Messages logged to the web console
HTML
The raw HTML body of the page
<!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>