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="è¦å½é²äºé鹤ï¼è¦é£äººé´çç«"> 10 <meta name="keywords" content="ä¼å®¢ææ, å°¤å éé, ukulele, uke, ä¹å 丽丽, ç¨åºç¿, è§é¢åªè¾"> 11 <meta name="theme-color" content="#000000"> 12 13 <!-- Open Graph --> 14 <meta property="og:title" content="æ - ä¼å®¢ææçå客 | Uulili's Blog"> 15 16 <meta property="og:type" content="website"> 17 <meta property="og:description" content="ææ¯ä¼å®¢ææ"> 18 19 <meta property="og:image" content="https://shisaq.github.io/img/avatar-shisaq.jpg"> 20 <meta property="og:url" content="https://shisaq.github.io/about/"> 21 <meta property="og:site_name" content="ä¼å®¢ææçå客 | Uulili's Blog"> 22 23 <title>æ - ä¼å®¢ææçå客 | Uulili's Blog</title> 24 25 <!-- Web App Manifest --> 26 <link rel="manifest" href="/pwa/manifest.json"> 27 28 <!-- Favicon --> 29 <link rel="shortcut icon" href="/img/favicon.ico"> 30 31 <!-- Canonical URL --> 32 <link rel="canonical" href="https://shisaq.github.io/about/"> 33 34 <!-- Bootstrap Core CSS --> 35 <link rel="stylesheet" href="/css/bootstrap.min.css"> 36 37 <!-- Custom CSS --> 38 <link rel="stylesheet" href="/css/hux-blog.min.css"> 39 40 <!-- Custom Fonts --> 41 <!-- <link href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/fontawesome.min.css" rel="stylesheet" type="text/css"> --> 42 <!-- Hux change font-awesome CDN to qiniu --> 43 <!-- <link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta2/css/fontawesome.min.css" rel="stylesheet" type="text/css"> --> 44 <link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta2/css/all.min.css" rel="stylesheet" type="text/css"> 45 46 <!-- adwords --> 47
47<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1085659005199651" 48 crossorigin="anonymous"></script>
48 49 50 <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> 51 <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> 52 <!--[if lt IE 9]> 53
53<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
53 54
54<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
54 55 <![endif]--> 56 57 <!-- ga & ba script hoook --> 58
58<script></script>
58 59</head> 60 61 62<!-- hack iOS CSS :active style --> 63<body ontouchstart=""> 64 65 <!-- Navigation --> 66 67 <nav class="navbar navbar-default navbar-custom navbar-fixed-top"> 68 69 <div class="container-fluid"> 70 <!-- Brand and toggle get grouped for better mobile display --> 71 <div class="navbar-header page-scroll"> 72 <button type="button" class="navbar-toggle"> 73 <span class="sr-only">Toggle navigation</span> 74 <span class="icon-bar"></span> 75 <span class="icon-bar"></span> 76 <span class="icon-bar"></span> 77 </button> 78 <a class="navbar-brand" href="/">ä¼å®¢ææ</a> 79 </div> 80 81 <!-- Collect the nav links, forms, and other content for toggling --> 82 <div id="huxblog_navbar"> 83 <div class="navbar-collapse"> 84 <ul class="nav navbar-nav navbar-right"> 85 <li> 86 <a href="/">é¦é¡µ</a> 87 </li> 88 89 90 91 92 <li> 93 <a href="/about/">æ</a> 94 </li> 95 96 97 98 <li> 99 <a href="/archive/">æç« åç±»</a> 100 </li> 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 <li class="search-icon"> 156 <a href="javascript:void(0)"> 157 <i class="fa fa-search"></i> 158 </a> 159 </li> 160 </ul> 161 </div> 162 </div> 163 <!-- /.navbar-collapse --> 164 </div> 165 <!-- /.container --> 166 </nav> 167 168
168<script> 169 // Drop Bootstarp low-performance Navbar 170 // Use customize navbar with high-quality material design animation 171 // in high-perf jank-free CSS3 implementation 172 var $body = document.body; 173 var $toggle = document.querySelector('.navbar-toggle'); 174 var $navbar = document.querySelector('#huxblog_navbar'); 175 var $collapse = document.querySelector('.navbar-collapse'); 176 177 var __HuxNav__ = { 178 close: function () { 179 $navbar.className = " "; 180 // wait until animation end. 181 setTimeout(function () { 182 // prevent frequently toggle 183 if ($navbar.className.indexOf('in') < 0) { 184 $collapse.style.height = "0px" 185 } 186 }, 400) 187 }, 188 open: function () { 189 $collapse.style.height = "auto" 190 $navbar.className += " in"; 191 } 192 } 193 194 // Bind Event 195 $toggle.addEventListener('click', function (e) { 196 if ($navbar.className.indexOf('in') > 0) { 197 __HuxNav__.close() 198 } else { 199 __HuxNav__.open() 200 } 201 }) 202 203 /** 204 * Since Fastclick is used to delegate 'touchstart' globally 205 * to hack 300ms delay in iOS by performing a fake 'click', 206 * Using 'e.stopPropagation' to stop 'touchstart' event from 207 * $toggle/$collapse will break global delegation. 208 * 209 * Instead, we use a 'e.target' filter to prevent handler 210 * added to document close HuxNav. 211 * 212 * Also, we use 'click' instead of 'touchstart' as compromise 213 */ 214 document.addEventListener('click', function (e) { 215 if (e.target == $toggle) return; 216 if (e.target.className == 'icon-bar') return; 217 __HuxNav__.close(); 218 }) 219 </script>
219 220 <!-- Search --> 221<div class="search-page"> 222 <div class="search-icon-close-container"> 223 <span class="search-icon-close"> 224 <i class="fa fa-chevron-down"></i> 225 </span> 226 </div> 227 <div class="search-main container"> 228 <div class="row"> 229 <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 230 <form></form> 231 <input type="text" id="search-input" placeholder="ä½ è¦æ¾ä»ä¹å¢ï¼"> 232 </form> 233 <div id="search-results" class="mini-post-list"></div> 234 </div> 235 </div> 236 </div> 237</div> 238 239 <!-- Page Header --> 240 241 242 243 244 245 246 247<header class="intro-header" style="background-image: url('/img/about-bg.jpg')"> 248 <div class="container"> 249 <div class="row"> 250 <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 251 252 <div class="site-heading"> 253 254 <h1>æ</h1> 255 <span class="subheading">ææ¯ä¼å®¢ææ</span> 256 </div> 257 </div> 258 </div> 259 </div> 260</header> 261 262 263<!-- Main Content --> 264<div class="container"> 265 <div class="row"> 266 267 268<!-- USE SIDEBAR --> 269 <!-- PostList Container --> 270 <div class=" 271 col-lg-8 col-lg-offset-1 272 col-md-8 col-md-offset-1 273 col-sm-12 274 col-xs-12 275 postlist-container 276 "> 277 <!-- Language Selector --> 278 <select class="sel-lang" onchange= "onLanChange(this.options[this.options.selectedIndex].value)"> 279 <option value="0" selected> 䏿 | Chinese </option> 280 <option value="1"> è±æ | English </option> 281 </select> 282 283 284 285<!-- Chinese Version --> 286<div class="zh post-container"> 287 288 <p>Hiï¼ææ¯ä¼å®¢ææï¼ç»ä½ ççæ´»å ç¹é³å ~</p> 289 290<p>æ¬å客主è¦å享æå¨å¦ä¹ åç§ä¸è¥¿æ¶çæ¶è·ãå æ¬ä½ä¸éäºï¼ç¼ç¨ãåªè¾ãé³ä¹ãå°¤å ééãæèµã</p> 291 292<p>å¿«éæ¾å°æå¨å°¤å ééé¢åæä¾çç¥è¯ï¼</p> 293 294<h3 id="youtubeé¢é">YouTubeé¢é</h3> 295 296<p><a href="https://bit.ly/3hwep3x">https://bit.ly/3hwep3x</a></p> 297 298<h3 id="bç«">bç«</h3> 299 300<p><a href="https://space.bilibili.com/35566393">https://space.bilibili.com/35566393</a></p> 301 302<h3 id="å¾®å">å¾®å</h3> 303 304<p><a href="http://weibo.com/shisaq">http://weibo.com/shisaq</a></p> 305 306<h3 id="å°¤å ééé®é¢æ±æ»">å°¤å ééé®é¢æ±æ»</h3> 307 308<p><a href="https://support.qq.com/products/107004/">https://support.qq.com/products/107004/</a></p> 309 310<h3 id="ç¥ä¹">ç¥ä¹</h3> 311 312<p><a href="https://www.zhihu.com/people/shisaq">https://www.zhihu.com/people/shisaq</a></p> 313 314<h3 id="å ¬ä¼å·-ukleelee">å ¬ä¼å·: ukleelee</h3> 315 316<p><img src="https://markdown-img.s3.ap-northeast-1.amazonaws.com/shisaq/2021-03-10-11-32-39-微信äºç»´ç .jpg" alt="ä¼å®¢ææå ¬ä¼å·" /></p> 317 318<h3 id="è§é¢å·">è§é¢å·</h3> 319 320<p>ä¼å®¢ææ <img src="https://markdown-img.s3.ap-northeast-1.amazonaws.com/shisaq/2021-03-10-11-30-02-è§é¢å·.jpg" alt="ä¼å®¢ææè§é¢å·" /></p> 321 322<h3 id="微信">微信</h3> 323 324<p><img src="https://markdown-img.s3.ap-northeast-1.amazonaws.com/shisaq/2021-03-10-12-43-11-ä¼å®¢ææä¼ä¸å¾®ä¿¡äºç»´ç .png" alt="ä¼å®¢ææä¼ä¸å¾®ä¿¡" /></p> 325 326</div> 327 328<!-- English Version --> 329<div class="en post-container"> 330 331 <p>Hi, I am <em>@uulili</em>, itâs time to shine out!</p> 332 333<p>This blog is about to share my achievements during the lifelong learning process, including programming, filmmaking, music, ukulele, investment, etc.</p> 334 335<p>Here are the links to rapidly find out the ukulele knowledge at different platforms:</p> 336 337<h3 id="youtube-channel">YouTube Channel</h3> 338 339<p><a href="https://bit.ly/3hwep3x">https://bit.ly/3hwep3x</a></p> 340 341<h3 id="bilibili">Bilibili</h3> 342 343<p><a href="https://space.bilibili.com/35566393">https://space.bilibili.com/35566393</a></p> 344 345<h3 id="weibo">Weibo</h3> 346 347<p><a href="http://weibo.com/shisaq">http://weibo.com/shisaq</a></p> 348 349<h3 id="ukulele-qa">Ukulele Q&A</h3> 350 351<p><a href="https://support.qq.com/products/107004/">https://support.qq.com/products/107004/</a></p> 352 353<h3 id="zhihu">Zhihu</h3> 354 355<p><a href="https://www.zhihu.com/people/shisaq">https://www.zhihu.com/people/shisaq</a></p> 356 357<h3 id="wechat-official-account-ukleelee">Wechat Official Account: ukleelee</h3> 358 359<p><img src="https://markdown-img.s3.ap-northeast-1.amazonaws.com/shisaq/2021-03-10-11-32-39-微信äºç»´ç .jpg" alt="ä¼å®¢ææå ¬ä¼å·" /></p> 360 361<h3 id="wechat-channel">Wechat Channel</h3> 362 363<p>ä¼å®¢ææ <img src="https://markdown-img.s3.ap-northeast-1.amazonaws.com/shisaq/2021-03-10-11-30-02-è§é¢å·.jpg" alt="ä¼å®¢ææè§é¢å·" /></p> 364 365<h3 id="personal-wechat">Personal Wechat</h3> 366 367<p><img src="https://markdown-img.s3.ap-northeast-1.amazonaws.com/shisaq/2021-03-10-12-43-11-ä¼å®¢ææä¼ä¸å¾®ä¿¡äºç»´ç .png" alt="ä¼å®¢ææä¼ä¸å¾®ä¿¡" /></p> 368 369</div> 370 371 372 373<!-- disqus è¯è®ºæ¡ start --> 374<div class="comment"> 375 <div id="disqus_thread" class="disqus-thread"> 376 377 </div> 378</div> 379<!-- disqus è¯è®ºæ¡ end --> 380 381<!-- disqus å ¬å ±JS代ç start (ä¸ä¸ªç½é¡µåªéæå ¥ä¸æ¬¡) -->
382<script> 383 /** 384 * RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS. 385 * LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables */ 386 /* 387 var disqus_config = function () { 388 this.page.url = PAGE_URL; // Replace PAGE_URL with your page's canonical URL variable 389 this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable 390 }; 391 */ 392 (function() { // DON'T EDIT BELOW THIS LINE 393 var disqus_shortname = "shisaq"; 394 var disqus_identifier = "shisaq//about/"; 395 var disqus_url = "https://shisaq.github.io/about/"; 396 397 var d = document, s = d.createElement('script'); 398 s.src = '//' + disqus_shortname + '.disqus.com/embed.js'; 399 s.setAttribute('data-timestamp', +new Date()); 400 (d.head || d.body).appendChild(s); 401 })(); 402</script>
402 403<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript> 404<!-- disqus å ¬å ±JS代ç end --> 405 406 </div> 407 <!-- Sidebar Container --> 408 <div class=" 409 col-lg-3 col-lg-offset-0 410 col-md-3 col-md-offset-0 411 col-sm-12 412 col-xs-12 413 sidebar-container 414 "> 415 <!-- Featured Tags --> 416 417 418 419<section> 420 421 <h5><a href="/archive/">æç« åç±»</a></h5> 422 <div class="tags"> 423 424 425 426 427 428 429 <a data-sort="0208" 430 href="/archive/?tag=others" 431 title="others" 432 rel="4">others</a> 433 434 <a data-sort="0142" 435 href="/archive/?tag=%E6%8A%95%E8%B5%84%E7%90%86%E8%B4%A2" 436 title="æèµçè´¢" 437 rel="70">æèµçè´¢</a> 438 439 <a data-sort="0164" 440 href="/archive/?tag=%E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91" 441 title="å端å¼å" 442 rel="48">å端å¼å</a> 443 444 <a data-sort="0178" 445 href="/archive/?tag=%E4%B8%AA%E4%BA%BA%E6%88%90%E9%95%BF" 446 title="个人æé¿" 447 rel="34">个人æé¿</a> 448 449 <a data-sort="0197" 450 href="/archive/?tag=%E5%85%A8%E6%A0%88%E5%BC%80%E5%8F%91" 451 title="å ¨æ å¼å" 452 rel="15">å ¨æ å¼å</a> 453 454 <a data-sort="0200" 455 href="/archive/?tag=%E9%9F%B3%E8%A7%86%E9%A2%91%E5%88%B6%E4%BD%9C" 456 title="é³è§é¢å¶ä½" 457 rel="12">é³è§é¢å¶ä½</a> 458 459 <a data-sort="0202" 460 href="/archive/?tag=%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB" 461 title="ææ¯å享" 462 rel="10">ææ¯å享</a> 463 464 <a data-sort="0203" 465 href="/archive/?tag=%E7%BD%91%E7%BB%9C%E8%B5%84%E6%BA%90%E6%91%98%E5%BD%95" 466 title="ç½ç»èµæºæå½" 467 rel="9">ç½ç»èµæºæå½</a> 468 469 <a data-sort="0205" 470 href="/archive/?tag=howto" 471 title="howto" 472 rel="7">howto</a> 473 474 <a data-sort="0208" 475 href="/archive/?tag=%E7%94%9F%E4%BA%A7%E5%8A%9B" 476 title="ç产å" 477 rel="4">ç产å</a> 478 479 <a data-sort="0209" 480 href="/archive/?tag=%E6%99%BA%E8%83%BD%E5%AE%B6%E5%B1%85" 481 title="æºè½å®¶å± " 482 rel="3">æºè½å®¶å± </a> 483 484 <a data-sort="0209" 485 href="/archive/?tag=%E7%BB%88%E7%AB%AF" 486 title="ç»ç«¯" 487 rel="3">ç»ç«¯</a> 488 489 <a data-sort="0210" 490 href="/archive/?tag=%E5%A8%B1%E4%B9%90" 491 title="娱ä¹" 492 rel="2">娱ä¹</a> 493 494 <a data-sort="0210" 495 href="/archive/?tag=Home+Assistant" 496 title="Home Assistant" 497 rel="2">Home Assistant</a> 498 499 <a data-sort="0210" 500 href="/archive/?tag=journal" 501 title="journal" 502 rel="2">journal</a> 503 </div> 504</section> 505 506 507 <!-- Short About --> 508 <section class="visible-md visible-lg"> 509 <hr> 510 <h5><a href="/about/">ææ¯è°</a></h5> 511 <div class="short-about"> 512 513 <img src="/img/avatar-shisaq.jpg" /> 514 515 516 <p>è¦å½é²äºé鹤ï¼è¦é£äººé´çç«ã</p> 517 518 <!-- SNS Link --> 519 520 521 522<ul class="list-inline"> 523 524 525 526 527 <li> 528 <a href="https://space.bilibili.com/35566393"> 529 <span class="fa-stack fa-lg"> 530 <i class="fa fa-circle fa-stack-2x"></i> 531 <i class="fa-brands fa-bilibili fa-stack-1x fa-inverse"></i> 532 </span> 533 </a> 534 </li> 535 536 537 <li> 538 <a href="https://twitter.com/shisaq">
539 <span class="fa-stack fa-lg"> 540 <i class="fa fa-circle fa-stack-2x"></i> 541 <i class="fa-brands fa-twitter fa-stack-1x fa-inverse"></i> 542 </span> 543 </a> 544 </li> 545 546 547 <li> 548 <a target="_blank" href="https://www.zhihu.com/people/shisaq"> 549 <span class="fa-stack fa-lg"> 550 <i class="fa fa-circle fa-stack-2x"></i> 551 <i class="fa-brands fa-stack-1x fa-inverse">ç¥</i> 552 </span> 553 </a> 554 </li> 555 556 557 <li> 558 <a target="_blank" href="http://weibo.com/shisaq"> 559 <span class="fa-stack fa-lg"> 560 <i class="fa fa-circle fa-stack-2x"></i> 561 <i class="fa-brands fa-weibo fa-stack-1x fa-inverse"></i> 562 </span> 563 </a> 564 </li> 565 566 567 568 <li> 569 <a target="_blank" href="https://github.com/shisaq"> 570 <span class="fa-stack fa-lg"> 571 <i class="fa fa-circle fa-stack-2x"></i> 572 <i class="fa-brands fa-github fa-stack-1x fa-inverse"></i> 573 </span> 574 </a> 575 </li> 576 577 578</ul> 579 </div> 580</section> 581 582 <!-- Friends Blog --> 583 584<hr> 585<h5>åæ é¾æ¥</h5> 586<ul class="list-inline"> 587 588 <li><a href="http://huangxuan.me">Hux Blog</a></li> 589 590 <li><a href="#">Foo</a></li> 591 592 <li><a href="#">Bar</a></li> 593 594</ul> 595 596 </div> 597 598 </div> 599</div> 600 601 602 603 <!-- Footer --> 604<footer> 605 <div class="container"> 606 <div class="row"> 607 <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1"> 608 <!-- SNS Link --> 609 610 611 612<ul class="list-inline text-center"> 613 614 615 616 617 <li> 618 <a href="https://space.bilibili.com/35566393"> 619 <span class="fa-stack fa-lg"> 620 <i class="fa fa-circle fa-stack-2x"></i> 621 <i class="fa-brands fa-bilibili fa-stack-1x fa-inverse"></i> 622 </span> 623 </a> 624 </li> 625 626 627 <li> 628 <a href="https://twitter.com/shisaq"> 629 <span class="fa-stack fa-lg"> 630 <i class="fa fa-circle fa-stack-2x"></i> 631 <i class="fa-brands fa-twitter fa-stack-1x fa-inverse"></i> 632 </span> 633 </a> 634 </li> 635 636 637 <li> 638 <a target="_blank" href="https://www.zhihu.com/people/shisaq"> 639 <span class="fa-stack fa-lg"> 640 <i class="fa fa-circle fa-stack-2x"></i> 641 <i class="fa-brands fa-stack-1x fa-inverse">ç¥</i> 642 </span> 643 </a> 644 </li> 645 646 647 <li> 648 <a target="_blank" href="http://weibo.com/shisaq"> 649 <span class="fa-stack fa-lg"> 650 <i class="fa fa-circle fa-stack-2x"></i> 651 <i class="fa-brands fa-weibo fa-stack-1x fa-inverse"></i> 652 </span> 653 </a> 654 </li> 655 656 657 658 <li> 659 <a target="_blank" href="https://github.com/shisaq"> 660 <span class="fa-stack fa-lg"> 661 <i class="fa fa-circle fa-stack-2x"></i> 662 <i class="fa-brands fa-github fa-stack-1x fa-inverse"></i> 663 </span> 664 </a> 665 </li> 666 667 668</ul> 669 670 <p class="copyright text-muted"> 671 Copyright © ä¼å®¢ææ 2026 672 <br> 673 Powered by <a href="http://huangxuan.me">Hux Blog</a> | 674 <iframe style="margin-left: 2px; margin-bottom:-5px;" frameborder="0" scrolling="0" width="100px" 675 height="20px" 676 src="https://ghbtns.com/github-btn.html?user=huxpro&repo=huxpro.github.io&type=star&count=true"> 677 </iframe> 678 </p> 679 </div> 680 </div> 681 </div> 682</footer> 683 684<!-- jQuery -->
685<script src="/js/jquery.min.js "></script>
685 686 687<!-- Bootstrap Core JavaScript --> 688<!-- Currently, only navbar scroll-down effect at desktop still depends on this -->
689<script src="/js/bootstrap.min.js "></script>
689 690 691<!-- Custom Theme JavaScript -->
692<script src="/js/hux-blog.min.js "></script>
692 693 694<!-- Simple Jekyll Search -->
695<script src="/js/simple-jekyll-search.min.js"></script>
695 696 697<!-- Service Worker --> 698
699<script src="/js/snackbar.js "></script>
vendor: 1 bytes, line 699
699
700<script src="/js/sw-registration.js "></script>
700 701 702 703<!-- async load function -->
704<script> 705 function async(u, c) { 706 var d = document, t = 'script', 707 o = d.createElement(t), 708 s = d.getElementsByTagName(t)[0]; 709 o.src = u; 710 if (c) { o.addEventListener('load', function (e) { c(null, e); }, false); } 711 s.parentNode.insertBefore(o, s); 712 } 713</script>
713 714 715<!-- 716 Because of the native support for backtick-style fenced code blocks 717 right within the Markdown is landed in Github Pages, 718 From V1.6, There is no need for Highlight.js, 719 so Huxblog drops it officially. 720 721 - https://github.com/blog/2100-github-pages-now-faster-and-simpler-with-jekyll-3-0 722 - https://help.github.com/articles/creating-and-highlighting-code-blocks/ 723 - https://github.com/jneen/rouge/wiki/list-of-supported-languages-and-lexers 724--> 725<!-- 726
726<script> 727 async("http://cdn.bootcss.com/highlight.js/8.6/highlight.min.js", function(){ 728 hljs.initHighlightingOnLoad(); 729 }) 730 </script>
730 731 <link href="http://cdn.bootcss.com/highlight.js/8.6/styles/github.min.css" rel="stylesheet"> 732--> 733 734 735 736 737 738 739 740<!--fastClick.js -->
741<script> 742 async("//cdnjs.cloudflare.com/ajax/libs/fastclick/1.0.6/fastclick.min.js", function () { 743 var $nav = document.querySelector("nav"); 744 if ($nav) FastClick.attach($nav); 745 }) 746</script>
746 747 748 749<!-- Google Analytics --> 750
751<script> 752 // dynamic User by Hux 753 var _gaId = 'UA-49627206-1'; 754 var _gaDomain = 'shisaq.github.io'; 755 756 // Originial 757 (function (i, s, o, g, r, a, m) { 758 i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () { 759 (i[r].q = i[r].q || []).push(arguments) 760 }, i[r].l = 1 * new Date(); a = s.createElement(o), 761 m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m) 762 })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); 763 764 ga('create', _gaId, _gaDomain); 765 ga('send', 'pageview'); 766</script>
766 767 768 769 770<!-- Baidu Tongji --> 771
772<script> 773 // dynamic User by Hux 774 var _baId = '4cc1f2d8f3067386cc5cdb626a202900'; 775 776 // Originial 777 var _hmt = _hmt || []; 778 (function () { 779 var hm = document.createElement("script"); 780 hm.src = "//hm.baidu.com/hm.js?" + _baId; 781 var s = document.getElementsByTagName("script")[0]; 782 s.parentNode.insertBefore(hm, s); 783 })(); 784</script>
784 785 786 787 788<!-- Side Catalog --> 789
790<script type="text/javascript"> 791 function generateCatalog(selector) { 792 793 // interop with multilangual 794 if ('true' == 'true') { 795 _containerSelector = 'div.post-container.active' 796 } else { 797 _containerSelector = 'div.post-container' 798 } 799 800 // init 801 var P = $(_containerSelector), a, n, t, l, i, c; 802 a = P.find('h1,h2,h3,h4,h5,h6'); 803 804 // clean 805 $(selector).html('') 806 807 // appending 808 a.each(function () { 809 n = $(this).prop('tagName').toLowerCase(); 810 i = "#" + $(this).prop('id'); 811 t = $(this).text(); 812 c = $('<a href="' + i + '" rel="nofollow">' + t + '</a>'); 813 l = $('<li class="' + n + '_nav"></li>').append(c); 814 $(selector).append(l); 815 }); 816 return true; 817 } 818 819 generateCatalog(".catalog-body"); 820 821 // toggle side catalog 822 $(".catalog-toggle").click((function (e) { 823 e.preventDefault(); 824 $('.side-catalog').toggleClass("fold") 825 })) 826 827 /* 828 * Doc: https://github.com/davist11/jQuery-One-Page-Nav 829 * Fork by Hux to support padding 830 */ 831 async("/js/jquery.nav.js", function () { 832 $('.catalog-body').onePageNav({ 833 currentClass: "active", 834 changeHash: !1, 835 easing: "swing", 836 filter: "", 837 scrollSpeed: 700, 838 scrollOffset: 0, 839 scrollThreshold: .2, 840 begin: null, 841 end: null, 842 scrollChange: null, 843 padding: 80 844 }); 845 }); 846</script>
846 847 848 849 850<!-- Multi-Lingual --> 851 852<!-- Handle Language Change -->
853<script type="text/javascript"> 854 // get nodes 855 var $zh = document.querySelector(".zh"); 856 var $en = document.querySelector(".en"); 857 var $select = document.querySelector("select"); 858 859 // Changes at v1.8.1: include lang flag as a url query. This interop well with catalog hash anchors. 860 function getLang() { return new URLSearchParams(document.location.search).get("lang") } 861 862 function setLang(newLang) { 863 var params = new URLSearchParams(document.location.search) 864 params.set("lang", newLang) 865 document.location.search = params.toString() // refresh. 866 } 867 868 // handle render 869 function _render() { 870 var lang = getLang() 871 // en 872 if (lang == "en") { 873 $select.selectedIndex = 1; 874 $en.style.display = "block"; 875 $en.classList.add("active"); 876 $zh.style.display = "none"; 877 $zh.classList.remove("active"); 878 // default to zh-cn 879 } else { 880 $select.selectedIndex = 0; 881 $zh.style.display = "block"; 882 $zh.classList.add("active"); 883 $en.style.display = "none"; 884 $en.classList.remove("active"); 885 } 886 // interop with catalog 887 generateCatalog(".catalog-body"); 888 } 889 890 // handle select change 891 function onLanChange(index) { 892 if (index == 0) { 893 lang = "zh" 894 } else { 895 lang = "en" 896 } 897 setLang(lang) 898 } 899 900 // init 901 _render(); 902</script>
902 903 904 905<!-- Simple Jekyll Search -->
906<script> 907 // https://stackoverflow.com/questions/1912501/unescape-html-entities-in-javascript 908 function htmlDecode(input) { 909 var e = document.createElement('textarea'); 910 e.innerHTML = input; 911 // handle case of empty input 912 return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue; 913 } 914 915 SimpleJekyllSearch({ 916 searchInput: document.getElementById('search-input'), 917 resultsContainer: document.getElementById('search-results'), 918 json: '/search.json', 919 searchResultTemplate: '<div class="post-preview item"><a href="{url}"><h2 class="post-title">{title}</h2><h3 class="post-subtitle">{subtitle}</h3><hr></a></div>', 920 noResultsText: 'No results', 921 limit: 50, 922 fuzzy: false, 923 // a hack to get escaped subtitle unescaped. for some reason, 924 // post.subtitle w/o escape filter nuke entire search. 925 templateMiddleware: function (prop, value, template) { 926 if (prop === 'subtitle' || prop === 'title') { 927 if (value.indexOf("code")) { 928 return htmlDecode(value); 929 } else { 930 return value; 931 } 932 } 933 } 934 }); 935 936 $(document).ready(function () { 937 var $searchPage = $('.search-page'); 938 var $searchOpen = $('.search-icon'); 939 var $searchClose = $('.search-icon-close'); 940 var $searchInput = $('#search-input'); 941 var $body = $('body'); 942 943 $searchOpen.on('click', function (e) { 944 e.preventDefault(); 945 $searchPage.toggleClass('search-active'); 946 var prevClasses = $body.attr('class') || ''; 947 setTimeout(function () { 948 $body.addClass('no-scroll'); 949 }, 400) 950 951 if ($searchPage.hasClass('search-active')) { 952 $searchClose.on('click', function (e) { 953 e.preventDefault(); 954 $searchPage.removeClass('search-active'); 955 $body.attr('class', prevClasses); // from closure 956 }); 957 $searchInput.focus(); 958 } 959 }); 960 }); 961</script>
961 962 963 964<!-- Image to hack wechat --> 965<img src="/img/icon_wechat.png" width="0" height="0" /> 966<!-- Migrate from head to bottom, no longer block render and still work --> 967 968</body> 969 970</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.