- 扫描 ID:
- 8e441952-0e7e-47b1-8bba-c03784a95577已完成
- 提交的 URL:
- https://karnwong.me/
- 报告完成时间:
链接 · 找到 7 个
从页面中识别出的传出链接
链接 | 文本 |
---|---|
https://github.com/kahnwong | |
https://www.linkedin.com/in/karnsiree-w-7b535b202/ | |
https://speakerdeck.com/kahnwong | |
https://buymeacoffee.com/kahnwong | |
https://overbrowsing.com/projects/co2-shield | |
https://gohugo.io/ | Hugo |
https://github.com/adityatelange/hugo-PaperMod/ | PaperMod |
JavaScript 变量 · 找到 13 个
在页面窗口对象上加载的全局 JavaScript 变量是在函数外部声明的变量,可以从当前范围内的代码中的任何位置访问
名称 | 类型 |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
doNotTrack | boolean |
dnt | undefined |
gtag | function |
dataLayer | object |
mybutton | object |
plausible | function |
google_tag_manager | object |
控制台日志消息 · 找到 0 条
记录到 Web 控制台的消息
HTML
页面的原始 HTML 正文
<!DOCTYPE html><html lang="en" dir="auto"><head>
<meta name="generator" content="Hugo 0.135.0"><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<title>Karn Wong</title>
<meta name="description" content="Homepage and blog by Karn Wong">
<meta name="author" content="Karn Wong">
<link rel="canonical" href="https://karnwong.me/">
<link crossorigin="anonymous" href="/assets/css/stylesheet.css" rel="preload stylesheet" as="style">
<link rel="icon" href="https://karnwong.me/favicon.ico">
<link rel="icon" type="image/png" sizes="16x16" href="https://karnwong.me/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="https://karnwong.me/favicon-32x32.png">
<link rel="apple-touch-icon" href="https://karnwong.me/apple-touch-icon.png">
<link rel="mask-icon" href="https://karnwong.me/safari-pinned-tab.svg">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="https://karnwong.me/index.xml">
<link rel="alternate" type="application/json" href="https://karnwong.me/index.json">
<link rel="alternate" hreflang="en" href="https://karnwong.me/">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><script defer="" data-domain="karnwong.me" src="https://plausible.karnwong.me/js/script.js"></script>
<script async="" src="https://www.googletagmanager.com/gtag/js?id=G-8CYMFC0KZ9"></script>
<script>
var doNotTrack = false;
if ( false ) {
var dnt = (navigator.doNotTrack || window.doNotTrack || navigator.msDoNotTrack);
var doNotTrack = (dnt == "1" || dnt == "yes");
}
if (!doNotTrack) {
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-8CYMFC0KZ9');
}
</script><meta property="og:url" content="https://karnwong.me/">
<meta property="og:site_name" content="Karn Wong">
<meta property="og:title" content="Karn Wong">
<meta property="og:description" content="Homepage and blog by Karn Wong">
<meta property="og:locale" content="en">
<meta property="og:type" content="website">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Karn Wong">
<meta name="twitter:description" content="Homepage and blog by Karn Wong">
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Karn Wong",
"url": "https://karnwong.me/",
"description": "Homepage and blog by Karn Wong",
"logo": "https://karnwong.me/favicon.ico",
"sameAs": [
"https://github.com/kahnwong", "https://bsky.app/profile/karnwong.me", "https://www.linkedin.com/in/karnsiree-w-7b535b202/", "mailto:[email protected]", "https://speakerdeck.com/kahnwong", "https://buymeacoffee.com/kahnwong", "/resume.html", "index.xml", "https://webring.wonderful.software#karnwong.me"
]
}
</script>
</head>
<body class="list" id="top">
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
}
</script>
<header class="header">
<nav class="nav">
<div class="logo">
<a href="https://karnwong.me/" accesskey="h" title="Karn Wong (Alt + H)">Karn Wong</a>
<div class="logo-switches">
<button id="theme-toggle" accesskey="t" title="(Alt + T)">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</div>
<ul id="menu">
<li>
<a href="https://karnwong.me/now/" title="Now">
<span>Now</span>
</a>
</li>
<li>
<a href="https://karnwong.me/about/" title="About">
<span>About</span>
</a>
</li>
<li>
<a href="https://karnwong.me/resume.html" title="Resume">
<span>Resume</span>
</a>
</li>
<li>
<a href="https://karnwong.me/archives" title="Archives">
<span>Archives</span>
</a>
</li>
<li>
<a href="https://karnwong.me/projects/" title="Projects">
<span>Projects</span>
</a>
</li>
<li>
<a href="https://karnwong.me/speaking/" title="Speaking">
<span>Speaking</span>
</a>
</li>
<li>
<a href="https://karnwong.me/tags/" title="Tags">
<span>Tags</span>
</a>
</li>
</ul>
</nav>
</header>
<main class="main">
<article class="first-entry home-info">
<header class="entry-header">
<h1>Karn Wong</h1>
</header>
<div class="entry-content">
Platform Engineer | Technical Leadership | HashiCorp Ambassador | AWS & GCP 2X Certified
</div>
<footer class="entry-footer">
<div class="social-icons">
<a href="https://github.com/kahnwong" target="_blank" rel="noopener noreferrer me" title="Github">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22">
</path>
</svg>
</a>
<a href="https://bsky.app/profile/karnwong.me" target="_blank" rel="noopener noreferrer me" title="Bluesky">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 360 320" fill="currentColor">
<path d="M180 141.964C163.699 110.262 119.308 51.1817 78.0347 22.044C38.4971 -5.86834 23.414 -1.03207 13.526 3.43594C2.08093 8.60755 0 26.1785 0 36.5164C0 46.8542 5.66748 121.272 9.36416 133.694C21.5786 174.738 65.0603 188.607 105.104 184.156C107.151 183.852 109.227 183.572 111.329 183.312C109.267 183.642 107.19 183.924 105.104 184.156C46.4204 192.847 -5.69621 214.233 62.6582 290.33C137.848 368.18 165.705 273.637 180 225.702C194.295 273.637 210.76 364.771 295.995 290.33C360 225.702 313.58 192.85 254.896 184.158C252.81 183.926 250.733 183.645 248.671 183.315C250.773 183.574 252.849 183.855 254.896 184.158C294.94 188.61 338.421 174.74 350.636 133.697C354.333 121.275 360 46.8568 360 36.519C360 26.1811 357.919 8.61012 346.474 3.43851C336.586 -1.02949 321.503 -5.86576 281.965 22.0466C240.692 51.1843 196.301 110.262 180 141.964Z"></path>
</svg>
</a>
<a href="https://www.linkedin.com/in/karnsiree-w-7b535b202/" target="_blank" rel="noopener noreferrer me" title="Linkedin">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path>
<rect x="2" y="9" width="4" height="12"></rect>
<circle cx="4" cy="4" r="2"></circle>
</svg>
</a>
<a href="mailto:[email protected]" target="_blank" rel="noopener noreferrer me" title="Email">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 21" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path>
<polyline points="22,6 12,13 2,6"></polyline>
</svg>
</a>
<a href="https://speakerdeck.com/kahnwong" target="_blank" rel="noopener noreferrer me" title="Speakerdeck">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" stroke="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M10.025 13.875H4.687a4.688 4.688 0 0 1 0-9.375h6.227a1.875 1.875 0 0 1 0 3.75H4.592a.937.937 0 1 0 0 1.875h5.337a4.687 4.687 0 1 1 0 9.375H1.875a1.875 1.875 0 0 1 0-3.75h8.15a.938.938 0 0 0 0-1.875zM13.97 19.5a5.635 5.635 0 0 0 2.396-3.75h3.026a.93.93 0 0 0 .921-.938V9.189a.93.93 0 0 0-.921-.938h-5.497c.438-.498.704-1.155.704-1.875s-.266-1.377-.704-1.875h6.418C22.35 4.5 24 6.179 24 8.25v7.5c0 2.071-1.65 3.75-3.687 3.75H13.97z"></path>
</svg>
</a>
<a href="https://buymeacoffee.com/kahnwong" target="_blank" rel="noopener noreferrer me" title="Buymeacoffee">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 884 1279" fill="none" stroke="currentColor" stroke-width="2">
<path d="M791.109 297.518L790.231 297.002L788.201 296.383C789.018 297.072 790.04 297.472 791.109 297.518Z" fill="currentColor"></path>
<path d="M803.896 388.891L802.916 389.166L803.896 388.891Z" fill="currentColor"></path>
<path d="M791.484 297.377C791.359 297.361 791.237 297.332 791.118 297.29C791.111 297.371 791.111 297.453 791.118 297.534C791.252 297.516 791.379 297.462 791.484 297.377Z" fill="currentColor"></path>
<path d="M791.113 297.529H791.244V297.447L791.113 297.529Z" fill="currentColor"></path>
<path d="M803.111 388.726L804.591 387.883L805.142 387.573L805.641 387.04C804.702 387.444 803.846 388.016 803.111 388.726Z" fill="currentColor"></path>
<path d="M793.669 299.515L792.223 298.138L791.243 297.605C791.77 298.535 792.641 299.221 793.669 299.515Z" fill="currentColor"></path>
<path d="M430.019 1186.18C428.864 1186.68 427.852 1187.46 427.076 1188.45L427.988 1187.87C428.608 1187.3 429.485 1186.63 430.019 1186.18Z" fill="currentColor"></path>
<path d="M641.187 1144.63C641.187 1143.33 640.551 1143.57 640.705 1148.21C640.705 1147.84 640.86 1147.46 640.929 1147.1C641.015 1146.27 641.084 1145.46 641.187 1144.63Z" fill="currentColor"></path>
<path d="M619.284 1186.18C618.129 1186.68 617.118 1187.46 616.342 1188.45L617.254 1187.87C617.873 1187.3 618.751 1186.63 619.284 1186.18Z" fill="currentColor"></path>
<path d="M281.304 1196.06C280.427 1195.3 279.354 1194.8 278.207 1194.61C279.136 1195.06 280.065 1195.51 280.684 1195.85L281.304 1196.06Z" fill="currentColor"></path>
<path d="M247.841 1164.01C247.704 1162.66 247.288 1161.35 246.619 1160.16C247.093 1161.39 247.489 1162.66 247.806 1163.94L247.841 1164.01Z" fill="currentColor"></path>
<path d="M472.623 590.836C426.682 610.503 374.546 632.802 306.976 632.802C278.71 632.746 250.58 628.868 223.353 621.274L270.086 1101.08C271.74 1121.13 280.876 1139.83 295.679 1153.46C310.482 1167.09 329.87 1174.65 349.992 1174.65C349.992 1174.65 416.254 1178.09 438.365 1178.09C462.161 1178.09 533.516 1174.65 533.516 1174.65C553.636 1174.65 573.019 1167.08 587.819 1153.45C602.619 1139.82 611.752 1121.13 613.406 1101.08L663.459 570.876C641.091 563.237 618.516 558.161 593.068 558.161C549.054 558.144 513.591 573.303 472.623 590.836Z" fill="currentColor"></path>
<path d="M78.6885 386.132L79.4799 386.872L79.9962 387.182C79.5987 386.787 79.1603 386.435 78.6885 386.132Z" fill="currentColor"></path>
<path d="M879.567 341.849L872.53 306.352C866.215 274.503 851.882 244.409 819.19 232.898C808.711 229.215 796.821 227.633 788.786 220.01C780.751 212.388 778.376 200.55 776.518 189.572C773.076 169.423 769.842 149.257 766.314 129.143C763.269 111.85 760.86 92.4243 752.928 76.56C742.604 55.2584 721.182 42.8009 699.88 34.559C688.965 30.4844 677.826 27.0375 666.517 24.2352C613.297 10.1947 557.342 5.03277 502.591 2.09047C436.875 -1.53577 370.983 -0.443234 305.422 5.35968C256.625 9.79894 205.229 15.1674 158.858 32.0469C141.91 38.224 124.445 45.6399 111.558 58.7341C95.7448 74.8221 90.5829 99.7026 102.128 119.765C110.336 134.012 124.239 144.078 138.985 150.737C158.192 159.317 178.251 165.846 198.829 170.215C256.126 182.879 315.471 187.851 374.007 189.968C438.887 192.586 503.87 190.464 568.44 183.618C584.408 181.863 600.347 179.758 616.257 177.304C634.995 174.43 647.022 149.928 641.499 132.859C634.891 112.453 617.134 104.538 597.055 107.618C594.095 108.082 591.153 108.512 588.193 108.942L586.06 109.252C579.257 110.113 572.455 110.915 565.653 111.661C551.601 113.175 537.515 114.414 523.394 115.378C491.768 117.58 460.057 118.595 428.363 118.647C397.219 118.647 366.058 117.769 334.983 115.722C320.805 114.793 306.661 113.611 292.552 112.177C286.134 111.506 279.733 110.801 273.333 110.009L267.241 109.235L265.917 109.046L259.602 108.134C246.697 106.189 233.792 103.953 221.025 101.251C219.737 100.965 218.584 100.249 217.758 99.2193C216.932 98.1901 216.482 96.9099 216.482 95.5903C216.482 94.2706 216.932 92.9904 217.758 91.9612C218.584 90.9319 219.737 90.2152 221.025 89.9293H221.266C232.33 87.5721 243.479 85.5589 254.663 83.8038C258.392 83.2188 262.131 82.6453 265.882 82.0832H265.985C272.988 81.6186 280.026 80.3625 286.994 79.5366C347.624 73.2301 408.614 71.0801 469.538 73.1014C499.115 73.9618 528.676 75.6996 558.116 78.6935C564.448 79.3474 570.746 80.0357 577.043 80.8099C579.452 81.1025 581.878 81.4465 584.305 81.7391L589.191 82.4445C603.438 84.5667 617.61 87.1419 631.708 90.1703C652.597 94.7128 679.422 96.1925 688.713 119.077C691.673 126.338 693.015 134.408 694.649 142.03L696.732 151.752C696.786 151.926 696.826 152.105 696.852 152.285C701.773 175.227 706.7 198.169 711.632 221.111C711.994 222.806 712.002 224.557 711.657 226.255C711.312 227.954 710.621 229.562 709.626 230.982C708.632 232.401 707.355 233.6 705.877 234.504C704.398 235.408 702.75 235.997 701.033 236.236H700.895L697.884 236.649L694.908 237.044C685.478 238.272 676.038 239.419 666.586 240.486C647.968 242.608 629.322 244.443 610.648 245.992C573.539 249.077 536.356 251.102 499.098 252.066C480.114 252.57 461.135 252.806 442.162 252.771C366.643 252.712 291.189 248.322 216.173 239.625C208.051 238.662 199.93 237.629 191.808 236.58C198.106 237.389 187.231 235.96 185.029 235.651C179.867 234.928 174.705 234.177 169.543 233.397C152.216 230.798 134.993 227.598 117.7 224.793C96.7944 221.352 76.8005 223.073 57.8906 233.397C42.3685 241.891 29.8055 254.916 21.8776 270.735C13.7217 287.597 11.2956 305.956 7.64786 324.075C4.00009 342.193 -1.67805 361.688 0.472751 380.288C5.10128 420.431 33.165 453.054 73.5313 460.35C111.506 467.232 149.687 472.807 187.971 477.556C338.361 495.975 490.294 498.178 641.155 484.129C653.44 482.982 665.708 481.732 677.959 480.378C681.786 479.958 685.658 480.398 689.292 481.668C692.926 482.938 696.23 485.005 698.962 487.717C701.694 490.429 703.784 493.718 705.08 497.342C706.377 500.967 706.846 504.836 706.453 508.665L702.633 545.797C694.936 620.828 687.239 695.854 679.542 770.874C671.513 849.657 663.431 928.434 655.298 1007.2C653.004 1029.39 650.71 1051.57 648.416 1073.74C646.213 1095.58 645.904 1118.1 641.757 1139.68C635.218 1173.61 612.248 1194.45 578.73 1202.07C548.022 1209.06 516.652 1212.73 485.161 1213.01C450.249 1213.2 415.355 1211.65 380.443 1211.84C343.173 1212.05 297.525 1208.61 268.756 1180.87C243.479 1156.51 239.986 1118.36 236.545 1085.37C231.957 1041.7 227.409 998.039 222.9 954.381L197.607 711.615L181.244 554.538C180.968 551.94 180.693 549.376 180.435 546.76C178.473 528.023 165.207 509.681 144.301 510.627C126.407 511.418 106.069 526.629 108.168 546.76L120.298 663.214L145.385 904.104C152.532 972.528 159.661 1040.96 166.773 1109.41C168.15 1122.52 169.44 1135.67 170.885 1148.78C178.749 1220.43 233.465 1259.04 301.224 1269.91C340.799 1276.28 381.337 1277.59 421.497 1278.24C472.979 1279.07 524.977 1281.05 575.615 1271.72C650.653 1257.95 706.952 1207.85 714.987 1130.13C717.282 1107.69 719.576 1085.25 721.87 1062.8C729.498 988.559 737.115 914.313 744.72 840.061L769.601 597.451L781.009 486.263C781.577 480.749 783.905 475.565 787.649 471.478C791.392 467.391 796.352 464.617 801.794 463.567C823.25 459.386 843.761 452.245 859.023 435.916C883.318 409.918 888.153 376.021 879.567 341.849ZM72.4301 365.835C72.757 365.68 72.1548 368.484 71.8967 369.792C71.8451 367.813 71.9483 366.058 72.4301 365.835ZM74.5121 381.94C74.6842 381.819 75.2003 382.508 75.7337 383.334C74.925 382.576 74.4089 382.009 74.4949 381.94H74.5121ZM76.5597 384.641C77.2996 385.897 77.6953 386.689 76.5597 384.641V384.641ZM80.672 387.979H80.7752C80.7752 388.1 80.9645 388.22 81.0333 388.341C80.9192 388.208 80.7925 388.087 80.6548 387.979H80.672ZM800.796 382.989C793.088 390.319 781.473 393.726 769.996 395.43C641.292 414.529 510.713 424.199 380.597 419.932C287.476 416.749 195.336 406.407 103.144 393.382C94.1102 392.109 84.3197 390.457 78.1082 383.798C66.4078 371.237 72.1548 345.944 75.2003 330.768C77.9878 316.865 83.3218 298.334 99.8572 296.355C125.667 293.327 155.64 304.218 181.175 308.09C211.917 312.781 242.774 316.538 273.745 319.36C405.925 331.405 540.325 329.529 671.92 311.91C695.906 308.686 719.805 304.941 743.619 300.674C764.835 296.871 788.356 289.731 801.175 311.703C809.967 326.673 811.137 346.701 809.778 363.615C809.359 370.984 806.139 377.915 800.779 382.989H800.796Z" fill="currentColor"></path>
</svg>
</a>
<a href="/resume.html" target="_blank" rel="noopener noreferrer me" title="Cv">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M4 4v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8.342a2 2 0 0 0-.602-1.43l-4.44-4.342A2 2 0 0 0 13.56 2H6a2 2 0 0 0-2 2z"></path>
<path d="M9 13h6"></path>
<path d="M9 17h3"></path>
<path d="M14 2v4a2 2 0 0 0 2 2h4"></path>
</svg>
</a>
<a href="index.xml" target="_blank" rel="noopener noreferrer me" title="RsS">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M4 11a9 9 0 0 1 9 9"></path>
<path d="M4 4a16 16 0 0 1 16 16"></path>
<circle cx="5" cy="19" r="1"></circle>
</svg>
</a>
<a href="https://webring.wonderful.software#karnwong.me" target="_blank" rel="noopener noreferrer me" title="Webring">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<image xlink:href="https://webring.wonderful.software/webring.svg" src="https://webring.wonderful.software/webring.svg" width="24" height="24"></image>
</svg>
</a>
</div>
<div class="badges">
<br>
<a href="https://overbrowsing.com/projects/co2-shield">
<svg xmlns="http://www.w3.org/2000/svg" width="165" height="28" viewBox="0 0 165 28">
<image xlink:href="https://img.shields.io/badge/CO%e2%82%82-A+_0.040g-58C521.svg?style=for-the-badge&logo=CO2&logoColor=green" src="https://img.shields.io/badge/CO%e2%82%82-A+_0.040g-58C521.svg?style=for-the-badge&logo=CO2&logoColor=green" height="28"></image>
</svg>
</a>
</div>
</footer>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">Native Implementation vs Wasm for Go, Python and Rust Benchmark
</h2>
</header>
<div class="entry-content">
<p>In 2024 you would hear the term wasm pop up now and then. It is not exactly new, but it’s gaining more traction due to wider ecosystem in recent years. Wasm stands for web assembly, essentially it’s a format that allows you to execute binaries in browser runtimes.
Imagine creating a website, and you need to implement a specific function. The problem is that it is much easier to implement this function in Go, but your website is written in typescript. This happens to be a static site, so a backend shouldn’t be necessary. You can either:
...</p>
</div>
<footer class="entry-footer"><span title="2024-12-04 21:18:49 +0700 +07">December 4, 2024</span> · 3 min · Karn Wong</footer>
<a class="entry-link" aria-label="post link to Native Implementation vs Wasm for Go, Python and Rust Benchmark" href="https://karnwong.me/posts/2024/12/native-implementation-vs-wasm-for-go-python-and-rust-benchmark/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">Various notes on career-related stuff
</h2>
</header>
<div class="entry-content">
<p>Compensation Sometimes you need to take a pay cut in order to learn new skills. But it will pay off in the end. On the other hand, if you are paid above the market rate, when you have to move it’s probably harder because most orgs won’t offer the same compensation. Skills PM / PO / EM / Sales should understand technical stuff, as in they are aware of pros and cons of solutions being used. Bonus if they used to be an IC. “Do you need data structures and algorithms for $x” often comes up in community. Short answer is you don’t need it until you do. But most people never reach the point where they need to utilize DSA. Not because it’s obsolete, rather more of most people can get by with poorly-optimized code. Career ladder No matter how well you can perform in your current role, if you don’t have the right amount of soft skills and big-picture thinking, you can’t advance further. Most ICs who’s outgrowing their senior/technical lead roles tend to jump straight into considering that they are staff/principal engineer. This is almost always not the case, because to be a staff/principal, you still need soft skills and business acumen. You are influencing without authority after all. Most engineers are stuck at mid level, and that’s to be expected. And even less reach senior level. Less and less for technical lead and engineering manager. Some people are still mid level after 10 years in the industry, and you have to let them be. Not everyone has what it takes to advance. You would also find that some people can operate at a higher level, but it utilizes a lot of cognitive load for them, to the point they prefer to step down a level just to not lose their sanity. If you are doing your best and are the best performed member of your team - if you are not getting promoted, chances are your manager doesn’t want to lose you, because keeping you exactly where you are means your manager doesn’t have to find someone to replace you. But it can also be that you need to catch up on your soft skills. Talk to your manager to assess your skills gap. Having “senior” in the title doesn’t make someone actually operating at a senior level. It’s just a title. The same goes for “manager” as well. A lot of senior engineers by title are actually mid levels. And a lot of managers only took the job because they want more pay but don’t actually enjoy managerial duties. Roles Being a manager isn’t about attending meetings all day. Rather it’s unblocking people and making sure people get the support they need. But if they do this job well, you wouldn’t notice them at all. But if they do it poorly, you will notice their existence. Data roles can be business or tech oriented, or somewhere in the middle. No point in fighting whether a DS/DE/MLE role should be technical or business-led. Some roles are not entry-level. For instance, data engineering, data science, devops. But the caveat is that if you are joining an established team, it’s somewhat doable for entry-level. Some job descriptions for data engineering can include anything from development, ml deployment, data pipelines, visualization, etc. Some ops roles can expect anything from dev, llm experiment and deployment. This is a symptom of hiring managers not really understand roles collaboration. Because realistically no one can juggle everything at the same time. Your actual responsibilities and title may not align. It’s up to you to present your title in resume. After technical lead, one possible path is picking up management, PM and sales roles. If you have to manage but can’t understand engineers, it’s not going to work. If you have to keep the timeline in check and follow-up with people from multiple teams as a PM, not understanding the concerns from each team is not going to make your job as a PM easier. Pitching products and services to clients while not fully understand your offerings’ capabilities can cause more headaches for the engineering team, because if you promised what can’t actually be delivered, the engineering team wouldn’t want to work with you. Job change If you don’t learn something new at work for a while, maybe it’s time to move. Sometimes it’s not you, it’s them. If you want to change job because you don’t like someone at work, you probably find it’s not effective because such people can exist anywhere. Question is how are you going to handle them. Sometimes things are outside your control, and at certain point there’s no reason to fight against the current. Career change Data folks want to move to SWE. Vice versa is true. Both citing more pay on the other side. Side projects do help, but what actually happens is people copy-pasting them left and right. So unless your resume stands out, no one would look at your side projects. Even then, your side projects should be original idea. Some people want to switch career for better pay, there’s nothing wrong with it. But keep in mind the possibility that you might not be cut out for it. It can be hard to accept that you can’t switch over to a career you aimed for. The longer this keeps going, the greater cognitive dissonance. Be kind to yourself, because there are probably other things out there that you are good at. </p>
</div>
<footer class="entry-footer"><span title="2024-10-19 21:13:44 +0700 +07">October 19, 2024</span> · 5 min · Karn Wong</footer>
<a class="entry-link" aria-label="post link to Various notes on career-related stuff" href="https://karnwong.me/posts/2024/10/various-notes-on-career-related-stuff/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">Calling C from Go, Python and Rust benchmark
</h2>
</header>
<div class="entry-content">
<p>There’s a consensus that generally, c is very fast, and python is very slow. But if we are talking about go and rust, you would find that rust is slightly faster than go. So from fastest to slowest: c, rust, go, python.
But what if you have go, python and rust calling c function? There would be more overhead, but how much?
Calling C from Go, Python and Rust Stats ...</p>
</div>
<footer class="entry-footer"><span title="2024-10-12 14:56:10 +0700 +07">October 12, 2024</span> · 2 min · Karn Wong</footer>
<a class="entry-link" aria-label="post link to Calling C from Go, Python and Rust benchmark" href="https://karnwong.me/posts/2024/10/calling-c-from-go-python-and-rust-benchmark/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">LLM serving latency benchmark
</h2>
</header>
<div class="entry-content">
<p>After the rise of ChatGPT in 2023, these days most people are familiar with the concept of LLM - Large Language Model. If you are LLM users, things are looking bright because there are gazillion options for you to choose from.
But if you are on the other side - creating and deploying LLMs, there are certain things you need to think about. For one, your implementation team would have languages/frameworks they specialize in, so that’s already a constraint you have to work with when designing a solution.
...</p>
</div>
<footer class="entry-footer"><span title="2024-10-09 13:18:07 +0700 +07">October 9, 2024</span> · 2 min · Karn Wong</footer>
<a class="entry-link" aria-label="post link to LLM serving latency benchmark" href="https://karnwong.me/posts/2024/10/llm-serving-latency-benchmark/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2 class="entry-hint-parent">When (not) to use Terraform
</h2>
</header>
<div class="entry-content">
<p>If we are talking about IaC, Terraform would be on the list. It made IaC popular and help a lot of companies maintain infrastructure at scale. Especially when you have multiple sets of infrastructures to maintain, Terraform can help you reduce the setup time tremendously via using Terraform Modules. Think of this like a function / class in programming languages.
I’ve been cranking out a lot of Terraform, a lot of trials and errors along the way. Picking other people’s brains by reading a lot of blog posts, trawl community forums to see how other people use Terraform and what are their challenges. Below are summarizations of what I’ve experienced, in addition to what the general sentiments are.
...</p>
</div>
<footer class="entry-footer"><span title="2024-10-05 19:32:29 +0700 +07">October 5, 2024</span> · 3 min · Karn Wong</footer>
<a class="entry-link" aria-label="post link to When (not) to use Terraform" href="https://karnwong.me/posts/2024/10/when-not-to-use-terraform/"></a>
</article>
<footer class="page-footer">
<nav class="pagination">
<a class="next" href="https://karnwong.me/page/2/">Next »
</a>
</nav>
</footer>
</main>
<footer class="footer">
<span>© 2024 <a href="https://karnwong.me/">Karn Wong</a></span> ·
<span>
Powered by
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
</span>
</footer>
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z"></path>
</svg>
</a>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
</body></html>