1<!DOCTYPE html> 2<html lang="en"> 3 <head prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article#">
3<script src="/livereload.js?mindelay=10&v=2&port=80&path=livereload" data-no-instant defer></script>
3 4 <meta charset="UTF-8" /> 5 6 <meta name="generator" content="Hugo 0.110.0"><meta name="theme-color" content="#fff" /> 7 <meta name="color-scheme" content="light dark"> 8 9 10 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 11 12 <meta name="format-detection" content="telephone=no, date=no, address=no, email=no" /> 13 14 <meta http-equiv="Cache-Control" content="no-transform" /> 15 16 <meta http-equiv="Cache-Control" content="no-siteapp" /> 17 18 <title>Posts | Jinhua Blog</title> 19 20 <link rel="stylesheet" href="/css/meme.min.1086e29acbc490654176e7c2b583a0cb5e86675ecec538c544ef90ead886b504.css"/> 21 22 23 24
24<script src="https://cdn.jsdelivr.net/npm/[email protected]/lunr.min.js" defer></script>
24<script src="/js/meme.min.305b3bc5fd0cf013c19bcf759329887f2806f56ff26901dd47e274623c68a0d4.js"></script>
24 25 26 27 28 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 29 30 <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=IBM+Plex+Serif:ital,wght@0,400;0,500;0,700;1,400;1,700&family=Source+Code+Pro:ital,wght@0,400;0,700;1,400;1,700&family=Comfortaa:wght@700&display=swap" media="print" onload="this.media='all'" /> 31 <noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=IBM+Plex+Serif:ital,wght@0,400;0,500;0,700;1,400;1,700&family=Source+Code+Pro:ital,wght@0,400;0,700;1,400;1,700&family=Comfortaa:wght@700&display=swap" /></noscript> 32 33 <meta name="author" content="jinhualuo" /><meta name="description" content="MemE is a powerful and highly customizable GoHugo theme for personal blogs." /> 34 35 <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" /> 36 <link rel="mask-icon" href="/icons/safari-pinned-tab.svg" color="#2a6df4" /> 37 <link rel="apple-touch-icon" sizes="180x180" href="/icons/apple-touch-icon.png" /> 38 <meta name="apple-mobile-web-app-capable" content="yes" /> 39 <meta name="apple-mobile-web-app-title" content="Jinhua Blog" /> 40 <meta name="apple-mobile-web-app-status-bar-style" content="black" /> 41 <meta name="mobile-web-app-capable" content="yes" /> 42 <meta name="application-name" content="Jinhua Blog" /> 43 <meta name="msapplication-starturl" content="../" /> 44 <meta name="msapplication-TileColor" content="#fff" /> 45 <meta name="msapplication-TileImage" content="../icons/mstile-150x150.png" /> 46 <link rel="manifest" href="/manifest.json" /> 47 48 49 50 51 52 <link rel="canonical" href="//luajit.io:80/posts/" /> 53 54
55<script type="application/ld+json"> 56 { 57 "@context": "https://schema.org", 58 "@type": "WebPage", 59 "datePublished": "2022-10-01T20:17:43+00:00", 60 "dateModified": "2026-01-02T11:12:14+08:00", 61 "url": "//luajit.io:80/posts/", 62 "name": "Posts", 63 "description": "MemE is a powerful and highly customizable GoHugo theme for personal blogs.", 64 "image": "//luajit.io:80/icons/apple-touch-icon.png", 65 "license": "[CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en)", 66 "publisher": { 67 "@type": "Organization", 68 "name": "Jinhua Blog", 69 "logo": { 70 "@type": "ImageObject", 71 "url": "//luajit.io:80/icons/apple-touch-icon.png" 72 }, 73 "url": "//luajit.io:80/" 74 }, 75 "mainEntityOfPage": { 76 "@type": "WebSite", 77 "@id": "//luajit.io:80/" 78 } 79 } 80</script>
80 81 82 83 84<meta name="twitter:card" content="summary" /> 85 86<meta name="twitter:site" content="@kingluo" /> 87<meta name="twitter:creator" content="@kingluo" /> 88 89 90 91 92 93<meta property="og:title" content="Posts" /> 94<meta property="og:description" content="MemE is a powerful and highly customizable GoHugo theme for personal blogs." /> 95<meta property="og:url" content="//luajit.io:80/posts/" /> 96<meta property="og:site_name" content="Jinhua Blog" /> 97<meta property="og:locale" content="en" /><meta property="og:image" content="//luajit.io:80/icons/apple-touch-icon.png" /> 98 <meta property="og:type" content="website" /> 99 100 <link rel="preconnect" href="https://www.google-analytics.com" crossorigin />
vendor: 85 bytes, lines 100-106
100 101 102 103 104 105 106 <script async src="https://www.googletagmanager.com/gtag/js?id=
106G-THPHBYK4JK
vendor: 16 bytes, lines 106-107
106"></script> 107
107<script> 108
vendor: 152 bytes, lines 108-112
108window.dataLayer = window.dataLayer || []; 109 function gtag(){dataLayer.push(arguments);} 110 gtag('js', new Date()); 111 112 gtag('config', '
112G-THPHBYK4JK
vendor: 8 bytes, lines 112-113
112'); 113
113</script>
113 114 115 116 117 118 119 120 121 122</head> 123 124 <body> 125 <div class="container"> 126 127 <header class="header"> 128 129 <div class="header-wrapper"> 130 <div class="header-inner list"> 131 132 <div class="site-brand"> 133 134 <a href="/" class="brand">Jinhua Blog</a> 135 136 </div> 137 138 <nav class="nav"> 139 <ul class="menu" id="menu"> 140 141 142 143 144 145 146 147 <li class="menu-item active"><a href="/posts/"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="icon archive"><path d="M32 448c0 17.7 14.3 32 32 32h384c17.7 0 32-14.3 32-32V160H32v288zm160-212c0-6.6 5.4-12 12-12h104c6.6 0 12 5.4 12 12v8c0 6.6-5.4 12-12 12H204c-6.6 0-12-5.4-12-12v-8zM480 32H32C14.3 32 0 46.3 0 64v48c0 8.8 7.2 16 16 16h480c8.8 0 16-7.2 16-16V64c0-17.7-14.3-32-32-32z"/></svg><span class="menu-item-name">Posts</span></a> 148 </li> 149 150 151 152 <li class="menu-item"><a href="/categories/"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="icon th"><path d="M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z"/></svg><span class="menu-item-name">Categories</span></a> 153 </li> 154 155 156 157 <li class="menu-item"><a href="/tags/"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512" class="icon tags"><path d="M497.941 225.941L286.059 14.059A48 48 0 0 0 252.118 0H48C21.49 0 0 21.49 0 48v204.118a48 48 0 0 0 14.059 33.941l211.882 211.882c18.744 18.745 49.136 18.746 67.882 0l204.118-204.118c18.745-18.745 18.745-49.137 0-67.882zM112 160c-26.51 0-48-21.49-48-48s21.49-48 48-48 48 21.49 48 48-21.49 48-48 48zm513.941 133.823L421.823 497.941c-18.745 18.745-49.137 18.745-67.882 0l-.36-.36L527.64 323.522c16.999-16.999 26.36-39.6 26.36-63.64s-9.362-46.641-26.36-63.64L331.397 0h48.721a48 48 0 0 1 33.941 14.059l211.882 211.882c18.745 18.745 18.745 49.137 0 67.882z"/></svg><span class="menu-item-name">Tags</span></a> 158 </li> 159 160 161 162 <li class="menu-item"><a href="/about/"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512" class="icon user-circle"><path d="M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm0 96c48.6 0 88 39.4 88 88s-39.4 88-88 88-88-39.4-88-88 39.4-88 88-88zm0 344c-58.7 0-111.3-26.6-146.5-68.2 18.8-35.4 55.6-59.8 98.5-59.8 2.4 0 4.8.4 7.1 1.1 13 4.2 26.6 6.9 40.9 6.9 14.3 0 28-2.7 40.9-6.9 2.3-.7 4.7-1.1 7.1-1.1 42.9 0 79.7 24.4 98.5 59.8C359.3 421.4 306.7 448 248 448z"/></svg><span class="menu-item-name">About</span></a> 163 </li> 164 165 166 167 168 169 170 <li class="menu-item"> 171 <a id="theme-switcher" href="#"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="icon theme-icon-light"><path d="M193.2 104.5l48.8-97.5a18 18 0 0128 0l48.8 97.5 103.4 -34.5a18 18 0 0119.8 19.8l-34.5 103.4l97.5 48.8a18 18 0 010 28l-97.5 48.8 34.5 103.4a18 18 0 01-19.8 19.8l-103.4-34.5-48.8 97.5a18 18 0 01-28 0l-48.8-97.5l-103.4 34.5a18 18 0 01-19.8-19.8l34.5-103.4-97.5-48.8a18 18 0 010-28l97.5-48.8-34.5-103.4a18 18 0 0119.8-19.8zM256 128a128 128 0 10.01 0M256 160a96 96 0 10.01 0"/></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="icon theme-icon-dark"><path d="M27 412a256 256 0 10154-407a11.5 11.5 0 00-5 20a201.5 201.5 0 01-134 374a11.5 11.5 0 00-1
1715 13"/></svg></a> 172 </li> 173 174 175 176 177 178 179 180 181 182 <li class="menu-item search-item"> 183 <form id="search" class="search" role="search"> 184 <label for="search-input"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="icon search-icon"><path d="M505 442.7L405.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"/></svg></label> 185 <input type="search" id="search-input" class="search-input"> 186</form> 187 188<template id="search-result" hidden> 189 <article class="content post"> 190 <h2 class="post-title"><a class="summary-title-link"></a></h2> 191 <summary class="summary"></summary> 192 <div class="read-more-container"> 193 <a class="read-more-link">Read More »</a> 194 </div> 195 </article> 196</template> 197 198 </li> 199 200 201 202 </ul> 203</nav> 204 205 206 </div> 207 </div> 208 209 <input type="checkbox" id="nav-toggle" aria-hidden="true" /> 210 <label for="nav-toggle" class="nav-toggle"></label> 211 <label for="nav-toggle" class="nav-curtain"></label> 212 213 214 215 </header> 216 217 218 219 220 221 222 <main class="main list" id="main"> 223 <div class="main-inner"> 224 <div class="content list-group"> 225 226 227 <h1 class="list-title">Posts</h1> 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 <h2 class="list-year">2026<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" class="icon chinese-zodiac"><path d="M455 526q-1-23-23-28 0-21 10-21 8 0-9-10-27-18-45-18-14 0-2-15 9-13 18-13 9-1-17-16t-39-15q-15 1-5-15 7-11 15-13 7-1-10-9-38-22-51-21 0 3 4 22 4 18 15 49 12 31 28 58 16 28 46 48 30 19 65 17zm440 320q-8-3-18-3-11 0-17-1t-9-3-5-10-10-26q-9-17-22-35-13-19-23-34-11-16-18-19-6-3-12-23-6-18-17-52-10-32-20-52-5-9-13-15-9-6-19-10t-25-7q-16-3-31-4t-37-1q-21 0-43-2h-48q-29 0-53-1-42-1-76-27-34-27-54-61-21-33-33-72t-19-61q-6-21-5-25-1-5-10-7-5 1-8 10t-4 18-2 9q-1 3-27 21-62 20-87 59-12 13-18 33-7 21-1 37 5 16 20 19t31-5q15-8 23-18 3-4 9-10 10 3 24 0 14-4 24-8 3-1 9-4 16 3 24 35 9 32 10 64v30q-3 5-9 21-3 11-11 35-6 19-10 36-4 18-8 30-2 4-4 12-15 12-44 36-30 25-53 48-22 24-27 27-7 9-10 16-4 8-5 20v1q0 11 15 15 21 10 38 1 16-8 27-24 12-17 17-30t5-18q-1-2 2-3t6-4q3-2 7-1t7-1h2q21-3 42-13 22-10 37-21 16-12 29-25t19-20q3-3 8-9 27 22 87 23 59
3501 101-7t46-11q81 57 171 68 13 41 60 87 45 43 63 43h2q10-1 15-17 3-9 3-18 0-8-2-15-4-16-16-21zM237 402q-4 4-11 2t-11-5-9-8q4-8 11-13h4q13 3 18 10 4 7-2 14zm590 184q1 1 3 4l7 7q2 1 8 7 6 5 11 6t12 5q17 2 18-16 1-19-14-24-10-3-11-20-1-18-2-20-3-3-17-1-8 1-25 3-10 1-17-5-2-1-4-6t-4-6-7 0q-4 1-11 6-10 6-25 12-9 4-26 10-3 1-10 4-2 17 15 25t39 8q21 0 40 1 18 1 20 0z"/></svg></h2> 351 352 353 354 355 356 357 358 <h3 class="list-month">January</h3> 359 <ul class="list-part"> 360 361 <li class="list-item"> 362 <a href="/posts/coco-cpp20-coroutine/" class="list-item-title">coco: a simple stackless, single-threaded, and header-only C++20 coroutine library</a> 363 <time datetime="2026-01-02T00:00:00+00:00" class="list-item-time">January 2</time> 364 </li> 365 366 367 </ul> 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 <h2 class="list-year">2024<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" class="icon chinese-zodiac"><path d="M673 556q-10 0-31 7-20 7-39 14-18 7-30 5-5 0-11-3t-9-9-9-13q-6-8-8-15-2-4-6-13 8 0 20-2t16-2h13q4 2 13 9t14 12q3 3 9 10 5 1 17 2t22-11q11-11 3-30-8-23-2-38l15 15q2-5 8-19 10 3 42 12-1-4-5-17 5 0 8-2t4-6l12 6q0-22-21-39 20-4 23-9 3-4 4-9t-1-11-14-8q4-2 7-5t7-5q2-2 5-7 2 1 5 1t7-2 4-6q5-14-20-22 11-14 31-41 11-19 11-26 0-3-2-4t-6-2-17 5-26 22q-1 0-2-1t-4-1h-9q-4 0-4 2-19 15-26 35-10-2-31-8 2-1 6-6 3-4 12-14t14-20q5-9 13-18 7-9 5-13 0-13-14-13-23-1-46 35-7 0-9-14t-13 6q-1 2-2 5-4-15-11-28-6-12-14-21t-16-16q-8-8-18-14-9-6-17-8t-16-6q-9-4-14-3t-8-1q-1-1-3-1 4 14 15 57-12 1-49 2 1 2 1 6t3 14q3 9 4 18t1 15q0 7-1 10t-53 7q-22 2-4 7 2 1 7 2 14 4 28 14 13 11 18 18 2 2 6 7 5 15 2 28-3 12-18 22t-33 19q-17 8-43 12-25 4-48 9-22 5-48 5t-44 7q-19 7-25 16-6 8-11 16-3 5-3 9 0 2 1 3 0 2 1 6 5 0 22-2 3 7 12 27 4-5 15-21 6 5 22 21 2-5 7-11 3-4 9-11 4-6 10-10t9-8q0-1 2-2 3 7 13 22 10 14 19 23 3 4 9 10 2 25 12 47 10 23 20 36 11 14 23 26t18 15q3 2 8 5-4 2-8 9-4 6-6 13t-3 15-3 16q-2 7-1 14t-1 9v3q-68 36-49 80 1 3 5 8-4-10 3-24t16 2q7 10 12 12t7 2q1-1 3-2 5-12 8-16t5-3q3 1 8 5 7 4 14 6 12 3 15-12 3-16 0-29-1-6-2-16-2-15 12-33 15-19 33-26t37 16q28 31 1 75t-99 78q-92 44-29 75-15 19-21 33-5 13-4 19t9 6q7 0 14-1t16-5q7-3 20-9 6 25 18 25 15 0 39-37 11-19 11-20 10 14 18 19 8 4 16-5 8-8 13-15 6-7 11-22 2-7 6-20 0-2 2-8 28 15 33-33 3-23 1-50 36-20 45-77 9-56 2-103-4-23 0-38t9-22q2-1 6-5 9 5 36 21v-33q8 3 33 12l-8-40q6-2 25-11-37-28-59-18-23 9-32 23-9 15-10 20zm-7-155h-1q13-6 23 3-3 2-9 7h-11q-13-3-2-10zm-49-13q8 0 12 3t5 8q-2 1-6 4-3 2-7 3-5 1-5 0t-2-5q0-8 3-13z"/></svg></h2> 385 386 387 388 389 390 391 392 <h3 class="list-month">December</h3> 393 <ul class="list-part"> 394 395 <li class="list-item"> 396 <a href="/posts/coco-cpp11-coroutine/" class="list-item-title">coco: a simple stackless, single-threaded, and header-only C++11 coroutine library</a> 397 <time datetime="2024-12-22T00:00:00+00:00" class="list-item-time">December 22</time> 398 </li> 399 400 401 </ul> 402 403 404 405 406 407 408 409 410 <h3 class="list-month">February</h3> 411 <ul class="list-part"> 412 413 <li class="list-item"> 414 <a href="/posts/envoy-async-http-filter-lua-resty-ffi-vs-golang/" class="list-item-title">envoy asynchronous HTTP filter: lua-resty-ffi vs golang filter</a> 415 <time datetime="2024-02-04T00:00:00+00:00" class="list-item-time">February 4</time> 416 </li> 417 418 419 </ul> 420 421 422 423 424 425 426 427 428 <h3 class="list-month">January</h3> 429 <ul class="list-part"> 430 431 <li class="list-item"> 432 <a href="/posts/asynchronous-lua-filter-for-nginx-response/" class="list-item-title">Asynchronous nginx response header/body filter</a> 433 <time datetime="2024-01-04T00:00:00+00:00" class="list-item-time">January 4</time> 434 </li> 435 436 <li class="list-item"> 437 <a href="/posts/a-simple-http3-testing-framework-based-on-bash-and-curl/" class="list-item-title">burl: A simple but flexible HTTP/3 testing framework based on bash and curl</a> 438 <time datetime="2024-01-01T00:00:00+00:00" class="list-item-time">January 1</time> 439 </li> 440 441 442 </ul> 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 <h2 class="list-year">2023<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" class="icon chinese-zodiac"><path d="M655 927q1-3 11-8 9-5 18-15t8-27q1-34-53-30-2 1-5 1-13-24 4-41 8 4 19 7 12 3 20 6 3 0 8 1 21-7 2-52-18-45-36-58-4-2-9-6-3-2-9-7-4-3-7-8t-6-7q-4-2-7-7-1-2-5-6 30-13 44-38 15-24 15-49 0-24-5-47-6-22-11-37-2-4-7-13 22-45 37-84t19-66q3-16 8-49 3-22-1-35-5-14-6-24t-6-12q-1-2-3-4-32 7-59 35-28 29-44 64-17 35-28 69-11 33-17 57-2 7-5 22h-35q1-3 4-15 18-42 29-80 10-38 12-61 2-24-1-45-3-22-9-32-7-10-12-21-5-10-10-10-2-1-5-3-39 28-65 67-25 39-34 75-10 37-13 69t0 53q3 22 5 23t3 5q0 2 2 7 1 3 1 7t1 7v3q-24 19-35 39-11 21-11 38 0 18 7 33t14 27q7 11 17 19 11 8 10 11 4 6 1 16h-1q-10 4-38 16-62 29-72 71-8 27 12 37 11 4 24-2 49-20 51-10-2 19-7 55-80-21-83 16-2 23 22 42 5 3 10 5 28 14 6 19-90 6-89 33v2q2 10 10 17 27 6 52 8 26 2 45 2 20 0 37-2 18-2 31-6 8-2 25-7 11-3 18-8 7-6 12-8t7-6q1-1 2-3-16-20-14-31 2-10 10-14 9-4 15-1 34 13 43 27 3 4-2 5-7 2-21 5-7 2-9 5t-3 6 4 7 16 9q77 29 202-10l9-3q-16-39-84-40zM457 581v-1q-4-7 4-23l9-3q5 0 7 3t2 7-1 9-2 6q-2 4-6 10-10-2-13-8zm86-24q1-2 5-4t6-2q7 2 11 10-4 23-16 21-3-1-4-4-1-2-2-6-1-3-1-7t1-6v-2zm-13 76q-1 7-4 11t-6 7h-31q-14 0-13-8 1-7 21-14h2q24-7 31 4z"/></svg></h2> 460 461 462 463 464 465 466 467 <h3 class="list-month">July</h3> 468 <ul class="list-part"> 469 470 <li class="list-item"> 471 <a href="/posts/make-lua-resty-ffi-run-on-envoy/" class="list-item-title">Make lua-resty-ffi run on Envoy</a> 472 <time datetime="2023-07-09T00:00:00+00:00" class="list-item-time">July 9</time> 473 </li> 474 475 476 </ul> 477 478 479 480 481 482 483 484 485 <h3 class="list-month">April</h3> 486 <ul class="list-part"> 487 488 <li class="list-item"> 489 <a href="/posts/openresty-lua-request-time/" class="list-item-title">OpenResty: record the Lua execution time per request in ngx.ctx via LD_PRELOAD</a> 490 <time datetime="2023-04-21T00:00:00+00:00" class="list-item-time">April 21</time> 491 </li> 492 493 <li class="list-item"> 494 <a href="/posts/http3-client-for-openresty/" class="list-item-title">HTTP/3 client library for OpenResty</a> 495 <time datetime="2023-04-05T10:50:00+00:00" class="list-item-time">April 5</time> 496 </li> 497 498 499 </ul> 500 501 502 503 504 505 506 507 508 <h3 class="list-month">March</h3> 509 <ul class="list-part"> 510 511 <li class="list-item"> 512 <a href="/posts/access-windows-adds-kerberos-from-openresty/" class="list-item-title">Access Windows Active Directory Domain Services with Kerberos Authentication from OpenResty</a> 513 <time datetime="2023-03-11T00:39:21+00:00" class="list-item-time">March 11</time> 514 </li> 515 516 517 </ul> 518 519 520 521 522 523 524 525 526 <h3 class="list-month">February</h3> 527 <ul class="list-part"> 528 529 <li class="list-item"> 530 <a href="/posts/resolve-c-static-variables-of-main-executable-from-the-dynamic-loaded-shared-library/" class="list-item-title">Resolve C static variables of the main executable from the dynamic loaded shared library</a> 531 <time datetime="2023-02-05T10:51:01+00:00" class="list-item-time">February 5</time> 532 </li> 533 534 535 </ul> 536 537 538 539 540 541 542 543 544 <h3 class="list-month">January</h3> 545 <ul class="list-part"> 546 547 <li class="list-item"> 548 <a href="/posts/learn-async-rust-from-assembly-code/" class="list-item-title">Learn Async Rust From Assembly Code</a> 549 <time datetime="2023-01-29T12:14:34+00:00" class="list-item-time">January 29</time> 550 </li> 551 552 <li class="list-item"> 553 <a href="/posts/java-class-reloading/" class="list-item-title">Java Class Reloading</a> 554 <time datetime="2023-01-15T09:24:13+00:00" class="list-item-time">January 15</time> 555 </li> 556 557 558 </ul> 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 <h2 class="list-year">2022<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" class="icon chinese-zodiac"><path d="M200 729q35-36 140-142 1 0 3 1 7 4 19 11 4 2 13 8 3 2 12 9 5 4 10 10t5 11q4 21 23 35 25 21 28-23v-4q1-6 7-23-7 3-28 10l-2-3q-2-1-6-6-2-3-7-9-3-4-5-11t-1-12q1-4 7-10t16-8q16-3 27 6t21 26q11 16 10 17 3 4-2 11-4 8-12 14-2 1-6 5-1 0-1 1t-1 4-1 5 1 5 3 3q3 1 8 1 6 1 12-2 81-25 31-102-2-4-5-8-2-3-5-7-2-4-5-7-10-18-24-39-13-20-29-33-9-7-19-14-7-4-21-13 24-8 36-11 20-5 10-19-10-13-34-15-26-3-52 30-37-12-74-4-22 4-44 15-8 4-16 9-13 8-24 17-18 14-33 33-8 12-25 35-22 40-33 92-11 53 0 95 2 8 7 25 3 10 6 18 3 7 3 8t2 5 0 3-1 4q-2 0-4 1t-6 2-9 5-7 8q-2 5-4 11t3 13 13 15q3-5 8-15 10-11 14 12 0 6 1 17l12-12q6-5 11-8t11-4q7-1 10 2t4 14q4-1 12-5 7-3 23-8 15-5 21-4-52-50-57-101zm251-216q0-1 4 5 3 5 11 16 1 0 1 3t-1 5-1 5q0 4-4-1-3-1-6-3-2-1-4-3v-27zM143 787q-1 0-1 1l-1 1q1 0 2-2zm162-147q67 96 86 122v13q-33-11-38 8-4 13-3 26 1 12 9 14 8-7 23-22 2 7 9 28 7-6 26-24 4 3 16 11 51-24 55-38-49-59-149-175-9 9-34 37zm252-42q1 22-27 70-14 3-25 9-11 7-19 13-7 6-10 13t-5 14q-2 8-2 13t-1 9v3q5-2 20-6 2 4 6 17 6-5 27-22 4 3 14 13 5-3 22-12v-33q12-4 22-12 9-8 13-16 3-5 8-15 4-8 4-12 1-2 1-4 10-13 40-53-14-4-28-4-13 0-24 1t-19 5q-7 5-13 6-1 1-4 3zm367 110q-3-14-18-59-14-45-15-60-2-16-27-27-30-15-39 10-2 6-1 17-3-8-8-19t-19-36q-15-24-25-28-24-11-86-27-61-17-91-17-20 0 2-16 40-29 99-37 36-5 60 5 26 11 41 23 14 12 17 23 3 12-3 24t-19 22q9 11 29 32 2-2 6-7t15-18q10-14 14-28t3-34q-1-19-12-37-14-21-39-32-25-12-53-14-29-2-58 4-28 6-59 16-15 5-28 10-12 5-20 10-5 4-16 10-7 6-10 10-2 3-7 9-4 5-5 7t-5 5q-25-2-76-5 6 4 15 13 10 10 30 42 21 33 35 74 13-1 38-2 22-1 69 2 48 3 62 10 29 16 56 50 28 35 25 56-2 0-4 1-4 1-11 4-8 3-13 8t-12 11-8 14q-1 7 1 16t13 21v-4l2-7q1-2 3-8 1-3 6-6t12-3q2 29 11 37 17-29 28-30 3 9 8 27 3 7 7 7 4-28 18-28 10 0 24-3 13-3 27-13 12-8 12-19-1-3-1-6zM181 480h-3q-3 0-9-3t-11-8q-5-6-10-16-4-10-6-24-3-35 2-46 6-12 23-14 2 1 5 3t6 13q3 10 2 25-1 11 9 11 18-1 36-24 19-24 4-42-11-15-28-24-18-8-35-10-18-2-34 15-16 18-22 46t-6 51q0 35 14 58 10 17 24 17 17-1 39-28z"/></svg></h2> 576 577 578 579 580 581 582 583 <h3 class="list-month">December</h3> 584 <ul class="list-part"> 585 586 <li class="list-item"> 587 <a href="/posts/use-nodejs-to-extend-openresty/" class="list-item-title">Use Nodejs to extend Openresty/Nginx</a> 588 <time datetime="2022-12-14T10:51:01+00:00" class="list-item-time">December 14</time> 589 </li> 590 591 592 </ul> 593 594 595 596 597 598 599 600 601 <h3 class="list-month">November</h3> 602 <ul class="list-part"> 603 604 <li class="list-item"> 605 <a href="/posts/implement-grpc-client-in-rust-for-openresty/" class="list-item-title">Implement Grpc Client in Rust for Openresty</a> 606 <time datetime="2022-11-26T10:53:49+00:00" class="list-item-time">November 26</time> 607 </li> 608 609 <li class="list-item"> 610 <a href="/posts/learn-rust-from-assembly-code/" class="list-item-title">Learn Rust From Assembly Code</a> 611 <time datetime="2022-11-13T14:55:14+00:00" class="list-item-time">November 13</time> 612 </li> 613 614 615 </ul> 616 617 618 619 620 621 622 623 624 <h3 class="list-month">October</h3> 625 <ul class="list-part"> 626 627 <li class="list-item"> 628 <a href="/posts/json-vs-flatbuffers-in-lua/" class="list-item-title">Json vs Flatbuffers vs Protobuf in Lua</a> 629 <time datetime="2022-10-21T10:57:06+00:00" class="list-item-time">October 21</time> 630 </li> 631 632 <li class="list-item"> 633 <a href="/posts/my-shell-tips/" class="list-item-title">My Shell Tips</a> 634 <time datetime="2022-10-19T14:39:21+00:00" class="list-item-time">October 19</time> 635 </li> 636 637 <li class="list-item"> 638 <a href="/posts/vim-minimalist/" class="list-item-title">Vim Minimalist</a> 639 <ti
639me datetime="2022-10-15T07:56:38+00:00" class="list-item-time">October 15</time> 640 </li> 641 642 <li class="list-item"> 643 <a href="/posts/nginx-blocking/" class="list-item-title">Nginx Blocking</a> 644 <time datetime="2022-10-14T16:21:46+00:00" class="list-item-time">October 14</time> 645 </li> 646 647 <li class="list-item"> 648 <a href="/posts/analyze-lua-memory-leak-with-systemtap/" class="list-item-title">Analyze Lua Memory Leak With Systemtap</a> 649 <time datetime="2022-10-13T14:30:37+00:00" class="list-item-time">October 13</time> 650 </li> 651 652 <li class="list-item"> 653 <a href="/posts/gdb-black-magics/" class="list-item-title">Gdb Black Magics</a> 654 <time datetime="2022-10-06T10:55:36+00:00" class="list-item-time">October 6</time> 655 </li> 656 657 <li class="list-item"> 658 <a href="/posts/luajit-string-interning/" class="list-item-title">Luajit String Interning</a> 659 <time datetime="2022-10-05T13:58:25+00:00" class="list-item-time">October 5</time> 660 </li> 661 662 663 </ul> 664 665 666 667 668 669 </div> 670 </div> 671 </main> 672 673 674 675 <div id="back-to-top" class="back-to-top"> 676 <a href="#"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" class="icon arrow-up"><path d="M34.9 289.5l-22.2-22.2c-9.4-9.4-9.4-24.6 0-33.9L207 39c9.4-9.4 24.6-9.4 33.9 0l194.3 194.3c9.4 9.4 9.4 24.6 0 33.9L413 289.4c-9.5 9.5-25 9.3-34.3-.4L264 168.6V456c0 13.3-10.7 24-24 24h-32c-13.3 0-24-10.7-24-24V168.6L69.2 289.1c-9.3 9.8-24.8 10-34.3.4z"/></svg></a> 677 </div> 678 679 680 681 <footer id="footer" class="footer"> 682 <div class="footer-inner"> 683 <div class="site-info">© 2022â2026 jinhualuo</div><div class="powered-by">Powered by <a href="https://github.com/gohugoio/hugo" target="_blank" rel="noopener">Hugo</a> | Theme is <a href="https://github.com/reuixiy/hugo-theme-meme" target="_blank" rel="noopener">MemE</a></div><div class="site-copyright"><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en" target="_blank" rel="noopener">CC BY-NC-SA 4.0</a></div> 684 685 686 687 <ul class="socials"><li class="socials-item"> 688 <a href="/rss.xml" target="_blank" rel="external noopener" title="RSS"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="icon social-icon"><path d="M19.199 24C19.199 13.467 10.533 4.8 0 4.8V0c13.165 0 24 10.835 24 24h-4.801zM3.291 17.415c1.814 0 3.293 1.479 3.293 3.295 0 1.813-1.485 3.29-3.301 3.29C1.47 24 0 22.526 0 20.71s1.475-3.294 3.291-3.295zM15.909 24h-4.665c0-6.169-5.075-11.245-11.244-11.245V8.09c8.727 0 15.909 7.184 15.909 15.91z"/></svg></a> 689 </li><li class="socials-item"> 690 <a href="mailto:[email protected]" target="_blank" rel="external noopener" title="Email"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" class="icon social-icon"><path d="M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z"/></svg></a> 691 </li><li class="socials-item"> 692 <a href="https://github.com/kingluo" target="_blank" rel="external noopener" title="GitHub"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="icon social-icon"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a> 693 </li></ul> 694 695 696 697 698 699 </div> 700 </footer> 701 702 703 </div> 704 705 706 707 708 709 710 711 712 713 714 715 716
716<script> 717 function loadComments() { 718 if (!document.getElementById('disqus_thread')) { 719 return; 720 } 721 if (typeof DISQUS === 'undefined') { 722 const disqus_config = function() { 723 this.page.url = '\/\/luajit.io:80\/posts\/'; 724 this.page.identifier = '\/posts\/'; 725 this.page.title = 'Posts'; 726 }; 727 (function() { 728 const d = document, s = d.createElement('script'); s.async = true; 729 s.src = 'https://luajit-io.disqus.com/embed.js'; 730 s.setAttribute('data-timestamp', +new Date()); 731 (d.head || d.body).appendChild(s); 732 })(); 733 } else { 734 DISQUS.reset({ 735 reload: true, 736 config: function() { 737 this.page.url = '\/\/luajit.io:80\/posts\/'; 738 this.page.identifier = '\/posts\/'; 739 this.page.title = 'Posts'; 740 } 741 }); 742 } 743 } 744</script>
744 745 746 747 748 749 750 751 752 753 754 755 756 757 758
758<script src="https://cdn.jsdelivr.net/npm/medium-zoom@latest/dist/medium-zoom.min.js"></script>
758 759
760<script> 761 let imgNodes = document.querySelectorAll('div.post-body img'); 762 imgNodes = Array.from(imgNodes).filter(node => node.parentNode.tagName !== "A"); 763 764 mediumZoom(imgNodes, { 765 background: 'hsla(var(--color-bg-h), var(--color-bg-s), var(--color-bg-l), 0.95)' 766 }) 767</script>
767 768 769 770 771 772
772<script src="https://cdn.jsdelivr.net/npm/[email protected]/instantpage.min.js" type="module" defer></script>
772 773 774 775 776 777 778 779 </body> 780</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.