1<!DOCTYPE html> 2<html lang="en"> 3 4<head> 5 <meta charset="utf-8"> 6 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 7 <meta name="google-site-verification" content="xBT4GhYoi5qRD5tr338pgPM5OWHHIDR6mNg1a3euekI" /> 8 <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"> 9 <meta name="description" content="è¿éæ¯ @OLDK ç个人å客ï¼ä¸ä½ ä¸èµ·åç°æ´å¤§çä¸ç | 䏿å¦ä¹ ç¡é鲿¥"> 10 <meta name="keywords" content=" oldk Blog, å客, 个人ç½ç«, äºèç½, Web, NAS, 软路ç±"> 11 <meta name="theme-color" content="#000000"> 12 13 <!-- Open Graph --> 14 <meta property="og:title" 15 content="About - èKçå客 | OLDK Blog"> 16 17 <meta property="og:type" content="website"> 18 <meta property="og:description" 19 content="ãä»åçº¯åªæ³ææ¥åè¿å¾ä¸æµªè´¹ã"> 20 21 <meta property="og:image" content="https://111586.xyz/https://github.com/KEVINJ1E.png"> 22 <meta property="og:url" content="https://111586.xyz//about/"> 23 <meta property="og:site_name" content="èKçå客 | OLDK Blog"> 24 25 <title>About - èKçå客 | OLDK Blog</title> 26 27 <!-- Web App Manifest --> 28 <link rel="manifest" href="/pwa/manifest.json"> 29 30 <!-- Favicon --> 31 <link rel="shortcut icon" href="/img/favicon.ico"> 32 33 <!-- Canonical URL --> 34 <link rel="canonical" href="https://111586.xyz//about/"> 35 36 <!-- Bootstrap Core CSS --> 37 <link rel="stylesheet" href=" /css/bootstrap.min.css"> 38 39 <!-- Custom CSS --> 40 <link rel="stylesheet" href=" /css/hux-blog.min.css"> 41 42 <!-- Custom Fonts --> 43 <!-- <link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"> --> 44 <!-- Hux change font-awesome CDN to qiniu --> 45 <link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" 46 type="text/css"> 47 48 49 <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> 50 <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> 51 <!--[if lt IE 9]> 52
52<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
52 53
53<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
53 54 <![endif]--> 55 56 <!-- ga & ba script hoook --> 57
57<script></script>
57 58 59 <!-- Google AdSense --> 60
60<script data-ad-client="ca-pub-6487568398225121" async 61 src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
61 62</head> 63 64 65<!-- hack iOS CSS :active style --> 66<body ontouchstart=""> 67 68 <!-- Navigation --> 69 70 <nav class="navbar navbar-default navbar-custom navbar-fixed-top"> 71 72 <div class="container-fluid"> 73 <!-- Brand and toggle get grouped for better mobile display --> 74 <div class="navbar-header page-scroll"> 75 <button type="button" class="navbar-toggle"> 76 <span class="sr-only">Toggle navigation</span> 77 <span class="icon-bar"></span> 78 <span class="icon-bar"></span> 79 <span class="icon-bar"></span> 80 </button> 81 <a class="navbar-brand" href="/">OLDK Blog</a> 82 </div> 83 84 <!-- Collect the nav links, forms, and other content for toggling --> 85 <div id="huxblog_navbar"> 86 <div class="navbar-collapse"> 87 <ul class="nav navbar-nav navbar-right"> 88 <li> 89 <a href="/">Home</a> 90 </li> 91 92 93 94 95 <li> 96 <a href="/about/">About</a> 97 </li> 98 99 100 101 <li> 102 <a href="/archive/">Archive</a> 103 </li> 104 105 106 107 108 109 110 111 112 113 114 115 116 <li class="search-icon"> 117 <a href="javascript:void(0)"> 118 <i class="fa fa-search"></i> 119 </a> 120 </li> 121 </ul> 122 </div> 123 </div> 124 <!-- /.navbar-collapse --> 125 </div> 126 <!-- /.container --> 127 </nav> 128 129
129<script> 130 // Drop Bootstarp low-performance Navbar 131 // Use customize navbar with high-quality material design animation 132 // in high-perf jank-free CSS3 implementation 133 var $body = document.body; 134 var $toggle = document.querySelector('.navbar-toggle'); 135 var $navbar = document.querySelector('#huxblog_navbar'); 136 var $collapse = document.querySelector('.navbar-collapse'); 137 138 var __HuxNav__ = { 139 close: function () { 140 $navbar.className = " "; 141 // wait until animation end. 142 setTimeout(function () { 143 // prevent frequently toggle 144 if ($navbar.className.indexOf('in') < 0) { 145 $collapse.style.height = "0px" 146 } 147 }, 400) 148 }, 149 open: function () { 150 $collapse.style.height = "auto" 151 $navbar.className += " in"; 152 } 153 } 154 155 // Bind Event 156 $toggle.addEventListener('click', function (e) { 157 if ($navbar.className.indexOf('in') > 0) { 158 __HuxNav__.close() 159 } else { 160 __HuxNav__.open() 161 } 162 }) 163 164 /** 165 * Since Fastclick is used to delegate 'touchstart' globally 166 * to hack 300ms delay in iOS by performing a fake 'click', 167 * Using 'e.stopPropagation' to stop 'touchstart' event from 168 * $toggle/$collapse will break global delegation. 169 * 170 * Instead, we use a 'e.target' filter to prevent handler 171 * added to document close HuxNav. 172 * 173 * Also, we use 'click' instead of 'touchstart' as compromise 174 */ 175 document.addEventListener('click', function (e) { 176 if (e.target == $toggle) return; 177 if (e.target.className == 'icon-bar') return; 178 __HuxNav__.close(); 179 }) 180 </script>
180 181 <!-- Search --> 182<div class="search-page"> 183 <div class="search-icon-close-container"> 184 <span class="search-icon-close"> 185 <i class="fa fa-chevron-down"></i> 186 </span> 187 </div> 188 <div class="search-main container"> 189 <div class="row"> 190 <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 191 <form></form> 192 <input type="text" id="search-input" placeholder="$ grep..."> 193 </form> 194 <div id="search-results" class="mini-post-list"></div> 195 </div> 196 </div> 197 </div> 198</div> 199 200 <!-- Page Header --> 201 202 203 204<style type="text/css"> 205 header.intro-header{ 206 position: relative; 207 background-image: url('/img/bg-me-2022.jpg'); 208 background: ; 209 } 210 211 212 header.intro-header .header-mask{ 213 width: 100%; 214 height: 100%; 215 position: absolute; 216 background: rgba(0,0,0, 0.3); 217 } 218 219</style> 220 221 222 223 224 225 226 227<header class="intro-header" style="background-image: url('/img/bg-me-2022.jpg')"> 228 <div class="header-mask"></div> 229 <div class="container"> 230 <div class="row"> 231 <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 232 233 <div class="site-heading"> 234 235 <h1>About</h1> 236 <span class="subheading">ãä»åçº¯åªæ³ææ¥åè¿å¾ä¸æµªè´¹ã</span> 237 </div> 238 </div> 239 </div> 240 </div> 241</header> 242 243 244 245<!-- Main Content --> 246<div class="container"> 247 <div class="row"> 248 249 250 <!-- USE SIDEBAR --> 251 <!-- PostList Container --> 252 <div class="col-lg-8 col-lg-offset-1 col-md-8 col-md-offset-1 col-sm-12 253 col-xs-12 postlist-container"> 254 <!-- Language Selector --> 255 <select class="sel-lang" onchange= "onLanChange(this.options[this.options.selectedIndex].value)"> 256 <option value="0" selected> 䏿 | Chinese </option> 257 <option value="1"> è±æ | English </option> 258 </select> 259 260 261 262<!-- Chinese Version --> 263<div class="zh post-container"> 264 265 <p>Heyï¼ææ¯èKï¼a.k.a. OLDKï¼</p> 266 267</div> 268 269<!-- English Version --> 270<div class="en post-container"> 271 272 <p>Hey, I am Kï¼a.k.a. OLDKï¼</p> 273 274</div> 275 276 277 278 279 </div> 280 <!-- Sidebar Container --> 281 <div class="col-lg-3 col-lg-offset-0 col-md-3 col-md-offset-0 col-sm-12 282 col-xs-12 sidebar-container"> 283 <!-- Featured Tags --> 284 285 286 287<section> 288 289 <h5><a href="/archive/">FEATURED TAGS</a></h5> 290 <div class="tags"> 291 292 293 294 295 296 297 <a data-sort="0002" 298 href="/archive/?tag=Meta" 299 title="Meta" 300 rel="1">Meta</a> 301 302 <a data-sort="0001" 303 href="/archive/?tag=%E7%BD%91%E7%BB%9C%E6%8A%80%E6%9C%AF" 304 title="ç½ç»ææ¯" 305 rel="2">ç½ç»ææ¯</a> 306 307 <a data-sort="0002" 308 href="/archive/?tag=Telnet" 309 title="Telnet" 310 rel="1">Telnet</a> 311 312 <a data-sort="0002" 313 href="/archive/?tag=immortalwrt" 314 title="immortalwrt" 315 rel="1">immortalwrt</a> 316 317 <a data-sort="0002" 318 href="/archive/?tag=modem" 319 title="modem" 320 rel="1">modem</a> 321 322 <a data-sort="0002" 323 href="/archive/?tag=openwrt" 324 title="openwrt" 325 rel="1">openwrt</a> 326 </div> 327</section> 328 329 330 <!-- Short About --> 331 <section class="visible-md visible-lg"> 332 <hr> 333 <h5><a href="/about/">ABOUT ME</a></h5> 334 <div class="short-about"> 335 336 <img src="https://github.com/KEVINJ1E.png" /> 337 338 339 <p>䏿å¦ä¹ ç¡é鲿¥ <br> [Keep Learning, Infinite Progress]</p> 340 341 <!-- SNS Link --> 342 343 344 345<ul class="list-inline"> 346 347 348 349 350 351 352 353 354 355</ul> 356 </div> 357</section> 358 359 <!-- Friends Blog --> 360 361<hr> 362<h5>FRIENDS</h5> 363<ul class="list-inline"> 364 365 <li><a href="https://github.com/huxpro">Hux pro</a></li> 366 367</ul> 368 369 370 <!-- Ads --> 371
371<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
371 372<!-- first shot --> 373<!-- <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6487568398225121" data-ad-slot="4814308751" 374 data-ad-format="auto" data-full-width-responsive="true"></ins> -->
375<script> 376 (adsbygoogle = window.adsbygoogle || []).push({}); 377</script>
377 378 379 </div> 380 381 </div> 382</div> 383 384 385 386 387 <!-- Footer --> 388<footer> 389 <div class="container"> 390 <div class="row"> 391 <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 392 <!-- SNS Link --> 393 394 395 396<ul class="list-inline text-center"> 397 398 399 400 401 402 403 404 405 406</ul> 407 408 <p class="copyright text-muted"> 409 Copyright © OLDK Blog 2026 410 <br> 411 <!-- Powered by <a href="http://huangxuan.me">Hux Blog</a> | --> 412 <!-- <iframe style="margin-left: 2px; margin-bottom:-5px;" frameborder="0" scrolling="0" width="100px" 413 height="20px" 414 src="https://ghbtns.com/github-btn.html?user=huxpro&repo=huxpro.github.io&type=star&count=true"> --> 415 </iframe> 416 </p> 417 </div> 418 </div> 419 </div> 420</footer> 421 422<!-- jQuery -->
423<script src="/js/jquery.min.js "></script>
423 424 425<!-- Bootstrap Core JavaScript --> 426<!-- Currently, only navbar scroll-down effect at desktop still depends on this -->
427<script src="/js/bootstrap.min.js "></script>
427 428 429<!-- Custom Theme JavaScript -->
430<script src="/js/hux-blog.min.js "></script>
430 431 432<!-- Simple Jekyll Search -->
433<script src="/js/simple-jekyll-search.min.js"></script>
433 434 435<!-- Service Worker --> 436
437<script src="/js/snackbar.js "></script>
vendor: 1 bytes, line 437
437
438<script src="/js/sw-registration.js "></script>
438 439 440 441<!-- async load function -->
442<script> 443 function async(u, c) { 444 var d = document, t = 'script', 445 o = d.createElement(t), 446 s = d.getElementsByTagName(t)[0]; 447 o.src = u; 448 if (c) { o.addEventListener('load', function (e) { c(null, e); }, false); } 449 s.parentNode.insertBefore(o, s); 450 } 451</script>
451 452 453<!-- 454 Because of the native support for backtick-style fenced code blocks 455 right within the Markdown is landed in Github Pages, 456 From V1.6, There is no need for Highlight.js, 457 so Huxblog drops it officially. 458 459 - https://github.com/blog/2100-github-pages-now-faster-and-simpler-with-jekyll-3-0 460 - https://help.github.com/articles/creating-and-highlighting-code-blocks/ 461 - https://github.com/jneen/rouge/wiki/list-of-supported-languages-and-lexers 462--> 463<!-- 464
464<script> 465 async("http://cdn.bootcss.com/highlight.js/8.6/highlight.min.js", function(){ 466 hljs.initHighlightingOnLoad(); 467 }) 468 </script>
468 469 <link href="http://cdn.bootcss.com/highlight.js/8.6/styles/github.min.css" rel="stylesheet"> 470--> 471 472 473 474 475 476 477 478<!--fastClick.js -->
479<script> 480 async("//cdnjs.cloudflare.com/ajax/libs/fastclick/1.0.6/fastclick.min.js", function () { 481 var $nav = document.querySelector("nav"); 482 if ($nav) FastClick.attach($nav); 483 }) 484</script>
484 485 486 487<!-- Google Analytics --> 488
489<script> 490 // dynamic User by Hux 491 var _gaId = 'G-90DP1D7ER8'; 492 var _gaDomain = 'oldk.us.kg'; 493 494 // Originial 495 (function (i, s, o, g, r, a, m) { 496 i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () { 497 (i[r].q = i[r].q || []).push(arguments) 498 }, i[r].l = 1 * new Date(); a = s.createElement(o), 499 m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m) 500 })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); 501 502 ga('create', _gaId, _gaDomain); 503 ga('send', 'pageview'); 504</script>
504 505 506 507 508<!-- Baidu Tongji --> 509 510 511 512<!-- Side Catalog --> 513
514<script type="text/javascript"> 515 function generateCatalog(selector) { 516 517 // interop with multilangual 518 if ('true' == 'true') { 519 _containerSelector = 'div.post-container.active' 520 } else { 521 _containerSelector = 'div.post-container' 522 } 523 524 // init 525 var P = $(_containerSelector), a, n, t, l, i, c; 526 a = P.find('h1,h2,h3,h4,h5,h6'); 527 528 // clean 529 $(selector).html('') 530 531 // appending 532 a.each(function () { 533 n = $(this).prop('tagName').toLowerCase(); 534 i = "#" + $(this).prop('id'); 535 t = $(this).text(); 536 c = $('<a href="' + i + '" rel="nofollow">' + t + '</a>'); 537 l = $('<li class="' + n + '_nav"></li>').append(c); 538 $(selector).append(l); 539 }); 540 return true; 541 } 542 543 generateCatalog(".catalog-body"); 544 545 // toggle side catalog 546 $(".catalog-toggle").click((function (e) { 547 e.preventDefault(); 548 $('.side-catalog').toggleClass("fold") 549 })) 550 551 /* 552 * Doc: https://github.com/davist11/jQuery-One-Page-Nav 553 * Fork by Hux to support padding 554 */ 555 async("/js/jquery.nav.js", function () { 556 $('.catalog-body').onePageNav({ 557 currentClass: "active", 558 changeHash: !1, 559 easing: "swing", 560 filter: "", 561 scrollSpeed: 700, 562 scrollOffset: 0, 563 scrollThreshold: .2, 564 begin: null, 565 end: null, 566 scrollChange: null, 567 padding: 80 568 }); 569 }); 570</script>
570 571 572 573 574<!-- Multi-Lingual --> 575 576<!-- Handle Language Change -->
577<script type="text/javascript"> 578 // get nodes 579 var $zh = document.querySelector(".zh"); 580 var $en = document.querySelector(".en"); 581 var $select = document.querySelector("select"); 582 583 // Changes at v1.8.1: include lang flag as a url query. This interop well with catalog hash anchors. 584 function getLang() { return new URLSearchParams(document.location.search).get("lang") } 585 586 function setLang(newLang) { 587 var params = new URLSearchParams(document.location.search) 588 params.set("lang", newLang) 589 document.location.search = params.toString() // refresh. 590 } 591 592 // handle render 593 function _render() { 594 var lang = getLang() 595 // en 596 if (lang == "en") { 597 $select.selectedIndex = 1; 598 $en.style.display = "block"; 599 $en.classList.add("active"); 600 $zh.style.display = "none"; 601 $zh.classList.remove("active"); 602 // default to zh-cn 603 } else { 604 $select.selectedIndex = 0; 605 $zh.style.display = "block"; 606 $zh.classList.add("active"); 607 $en.style.display = "none"; 608 $en.classList.remove("active"); 609 } 610 // interop with catalog 611 generateCatalog(".catalog-body"); 612 } 613 614 // handle select change 615 function onLanChange(index) { 616 if (index == 0) { 617 lang = "zh" 618 } else { 619 lang = "en" 620 } 621 setLang(lang) 622 } 623 624 // init 625 _render(); 626</script>
626 627 628 629<!-- Simple Jekyll Search -->
630<script> 631 // https://stackoverflow.com/questions/1912501/unescape-html-entities-in-javascript 632 function htmlDecode(input) { 633 var e = document.createElement('textarea'); 634 e.innerHTML = input; 635 // handle case of empty input 636 return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue; 637 } 638 639 SimpleJekyllSearch({ 640 searchInput: document.getElementById('search-input'), 641 resultsContainer: document.getElementById('search-results'), 642 json: '/search.json', 643 searchResultTemplate: '<div class="post-preview item"><a href="{url}"><h2 class="post-title">{title}</h2><h3 class="post-subtitle">{subtitle}</h3><hr></a></div>', 644 noResultsText: 'No results', 645 limit: 50, 646 fuzzy: false, 647 // a hack to get escaped subtitle unescaped. for some reason, 648 // post.subtitle w/o escape filter nuke entire search. 649 templateMiddleware: function (prop, value, template) { 650 if (prop === 'subtitle' || prop === 'title') { 651 if (value.indexOf("code")) { 652 return htmlDecode(value); 653 } else { 654 return value; 655 } 656 } 657 } 658 }); 659 660 $(document).ready(function () { 661 var $searchPage = $('.search-page'); 662 var $searchOpen = $('.search-icon'); 663 var $searchClose = $('.search-icon-close'); 664 var $searchInput = $('#search-input'); 665 var $body = $('body'); 666 667 $searchOpen.on('click', function (e) { 668 e.preventDefault(); 669 $searchPage.toggleClass('search-active'); 670 var prevClasses = $body.attr('class') || ''; 671 setTimeout(function () { 672 $body.addClass('no-scroll'); 673 }, 400) 674 675 if ($searchPage.hasClass('search-active')) { 676 $searchClose.on('click', function (e) { 677 e.preventDefault(); 678 $searchPage.removeClass('search-active'); 679 $body.attr('class', prevClasses); // from closure 680 }); 681 $searchInput.focus(); 682 } 683 }); 684 }); 685</script>
685 686 687 688<!-- Image to hack wechat --> 689<img src="/img/icon_wechat.png" width="0" height="0" /> 690<!-- Migrate from head to bottom, no longer block render and still work --> 691
692<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4bc70e2c01a94c73b74392e4234840661791215815920" integrity="sha512-L0ha0OXavK/8okipN9F8BtP84dg9DUhPERbBXzwI6dgTA55d2+yweo3pn5CSFYs45/r8md2+xvUPtTdvTNRfjA==" data-cf-beacon='{"version":"2024.11.0","token":"e9469b82953841bb8e96b9609e8e9efe","r":1,"spa":2}' crossorigin="anonymous"></script>
692 693</body> 694 695</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.