1<!DOCTYPE html><html lang="zh" class="false"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><link rel="canonical" href="https://nusr.github.io/about/"><meta name="generator" content="Astro v4.4.7"><!-- General Meta Tags --><title>About | Steve Xu</title><meta name="title" content="About | Steve Xu"><meta name="description" content="Welcome to My Blog"><meta name="author" content="Steve Xu"><!-- Open Graph / Facebook --><meta property="og:title" content="About | Steve Xu"><meta property="og:description" content="Welcome to My Blog"><meta property="og:url" content="https://nusr.github.io/about/"><meta property="og:image" content="https://nusr.github.io/op.jpeg"><!-- Article Published/Modified time --><!-- Twitter --><meta property="twitter:card" content="summary_large_image"><meta property="twitter:url" content="https://nusr.github.io/about/"><meta property="twitter:title" content="About | Steve Xu"><meta property="twitter:description" content="Welcome to My Blog"><meta property="twitter:image" content="https://nusr.github.io/op.jpeg"><meta name="theme-color" content=""><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><link rel="stylesheet" href="/_astro/about.CXnmc6_F.css" />
1<script type="module" src="/_astro/hoisted.B2MTPbHz.js"></script>
1</head> <body> <header class="astro-3ef6ksr2"> <a id="skip-to-content" href="#main-content" class="astro-3ef6ksr2">Skip to content</a> <div class="nav-container astro-3ef6ksr2"> <div class="top-nav-wrap astro-3ef6ksr2"> <a href="/" class="logo whitespace-nowrap astro-3ef6ksr2"> Steve Xu </a> <nav id="nav-menu" class="astro-3ef6ksr2"> <button class="hamburger-menu focus-outline astro-3ef6ksr2" aria-label="Open Menu" aria-expanded="false" aria-controls="menu-items"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="menu-icon astro-3ef6ksr2"> <line x1="7" y1="12" x2="21" y2="12" class="line astro-3ef6ksr2"></line> <line x1="3" y1="6" x2="21" y2="6" class="line astro-3ef6ksr2"></line> <line x1="12" y1="18" x2="21" y2="18" class="line astro-3ef6ksr2"></line> <line x1="18" y1="6" x2="6" y2="18" class="close astro-3ef6ksr2"></line> <line x1="6" y1="6" x2="18" y2="18" class="close astro-3ef6ksr2"></line> </svg> </button> <ul id="menu-items" class="display-none sm:flex astro-3ef6ksr2"> <li class="astro-3ef6ksr2"> <a href="/" class=" astro-3ef6ksr2"> Home </a> </li> <li class="astro-3ef6ksr2"> <a href="/archives/" class=" astro-3ef6ksr2"> 2Archives 3</a> </li> <li class="astro-3ef6ksr2"> <a href="/tags/" class=" astro-3ef6ksr2"> 4Tags 5</a> </li> <li class="astro-3ef6ksr2"> <a href="/about/" class="active astro-3ef6ksr2"> 6About 7</a> </li> <li class="astro-3ef6ksr2"> <a href="/search/" class="group inline-block hover:text-skin-accent focus-outline p-3 sm:p-1 flex astro-3ef6ksr2" aria-label="search" title="Search" target="_self"> <svg xmlns="http://www.w3.org/2000/svg" class="scale-125 sm:scale-100 astro-3ef6ksr2"><path d="M19.023 16.977a35.13 35.13 0 0 1-1.367-1.384c-.372-.378-.596-.653-.596-.653l-2.8-1.337A6.962 6.962 0 0 0 16 9c0-3.859-3.14-7-7-7S2 5.141 2 9s3.14 7 7 7c1.763 0 3.37-.66 4.603-1.739l1.337 2.8s.275.224.653.596c.387.363.896.854 1.384 1.367l1.358 1.392.604.646 2.121-2.121-.646-.604c-.379-.372-.885-.866-1.391-1.36zM9 14c-2.757 0-5-2.243-5-5s2.243-5 5-5 5 2.243 5 5-2.243 5-5 5z" class="astro-3ef6ksr2"></path> </svg> <span class="sr-only astro-3ef6ksr2">Search</span> </a> </li> <li class="astro-3ef6ksr2"> <button id="theme-btn" class="focus-outline astro-3ef6ksr2" title="Toggles light & dark" aria-label="auto" aria-live="polite"> <svg xmlns="http://www.w3.org/2000/svg" id="moon-svg" class="astro-3ef6ksr2"> <path d="M20.742 13.045a8.088 8.088 0 0 1-2.077.271c-2.135 0-4.14-.83-5.646-2.336a8.025 8.025 0 0 1-2.064-7.723A1 1 0 0 0 9.73 2.034a10.014 10.014 0 0 0-4.489 2.582c-3.898 3.898-3.898 10.243 0 14.143a9.937 9.937 0 0 0 7.072 2.93 9.93 9.93 0 0 0 7.07-2.929 10.007 10.007 0 0 0 2.583-4.491 1.001 1.001 0 0 0-1.224-1.224zm-2.772 4.301a7.947 7.947 0 0 1-5.656 2.343 7.953 7.953 0 0 1-5.658-2.344c-3.118-3.119-3.118-8.195 0-11.314a7.923 7.923 0 0 1 2.06-1.483 10.027 10.027 0 0 0 2.89 7.848 9.972 9.972 0 0 0 7.848 2.891 8.036 8.036 0 0 1-1.484 2.059z" class="astro-3ef6ksr2"></path> </svg> <svg xmlns="http://www.w3.org/2000/svg" id="sun-svg" class="astro-3ef6ksr2"> <path d="M6.993 12c0 2.761 2.246 5.007 5.007 5.007s5.007-2.246 5.007-5.007S14.761 6.993 12 6.993 6.993 9.239 6.993 12zM12 8.993c1.658 0 3.007 1.349 3.007 3.007S13.658 15.007 12 15.007 8.993 13.658 8.993 12 10.342 8.993 12 8.993zM10.998 19h2v3h-2zm0-17h2v3h-2zm-9 9h3v2h-3zm17 0h3v2h-3zM4.219 18.363l2.12-2.122 1.415 1.414-2.12 2.122zM16.24 6.344l2.122-2.122 1.414 1.414-2.122 2.122zM6.342 7.759 4.22 5.637l1.415-1.414 2.12 2.122zm13.434 10.605-1.414 1.414-2.122-2.122 1.414-1.414z" class="astro-3ef6ksr2"></path> </svg> </button> </li> </ul> </nav> </div> </div> <div class="mx-auto max-w-3xl px-4 astro-3ef6ksr2"> <hr class="border-skin-line astro-3ef6ksr2" aria-hidden> </div> </header> <main id="main-content"> <section id="about" class="prose mb-28 max-w-3xl prose-img:border-0"> <h1 class="mt-6 text-2xl tracking-wider sm:text-3xl"> About </h1> <p class="mt-4"><p>I am a software engineer.</p> 8<p><a href="https://github.com/nusr">github</a></p></p> </section> </main>
8<script src="https://utteranc.es/client.js" repo="nusr/nusr.github.io" issue-term="title" theme="preferred-color-scheme" label="comment" crossorigin="anonymous" async></script>
8<footer class="mt-auto astro-sz7xmlte"> <div class="mx-auto max-w-3xl px-0 astro-sz7xmlte"> <hr class="border-skin-line astro-sz7xmlte" aria-hidden> </div> <div class="footer-wrapper astro-sz7xmlte"> <div class="social-icons flex astro-xfej6wit"> <a href="https://github.com/nusr/nusr.github.io" class="group inline-block hover:text-skin-accent link-button astro-xfej6wit" title="Steve Xu on Github" target="_blank"> <svg viewBox="0 0 16 16" aria-hidden="true" width="32" height="32" astro-icon="social/github"><path 9 fill="currentColor" 10 d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z" 11 ></path></svg> <span class="sr-only astro-xfej6wit">Steve Xu on Github</span> </a><a href="/rss.xml" class="group inline-block hover:text-skin-accent link-button astro-xfej6wit" title="Steve Xu RSS" target="_blank"> <svg viewBox="0 0 1024 1024" aria-hidden="true" width="32" height="32"><path 12 fill="currentColor" 13 d="M42.666667 853.333333a128 128 0 1 1 256 0 128 128 0 0 1-256 0z m938.666666 128h-178.773333c0-418.986667-340.906667-759.893333-759.893333-759.893333V42.666667c517.546667 0 938.666667 421.12 938.666666 938.666666z m-298.666666 0h-182.826667c0-252.074667-205.098667-457.130667-457.173333-457.130666V341.333333c352.896 0 640 287.104 640 640z"></path></svg> <span class="sr-only astro-xfej6wit">Steve Xu RSS</span> </a><a href="https://twitter.com/stevenusr" class="group inline-block hover:text-skin-accent link-button astro-xfej6wit" title="Steve Xu on Twitter" target="_blank"> <svg 14 xmlns="http://www.w3.org/2000/svg" 15 class="icon-tabler" 16 stroke-linecap="round" 17 stroke-linejoin="round" 18 > 19 <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> 20 <path d="M22 4.01c-1 .49 -1.98 .689 -3 .99c-1.121 -1.265 -2.783 -1.335 -4.38 -.737s-2.643 2.06 -2.62 3.737v1c-3.245 .083 -6.135 -1.395 -8 -4c0 0 -4.182 7.433 4 11c-1.872 1.247 -3.739 2.088 -6 2c3.308 1.803 6.913 2.423 10.034 1.517c3.58 -1.04 6.522 -3.723 7.651 -7.742a13.84 13.84 0 0 0 .497 -3.753c-.002 -.249 1.51 -2.772 1.818 -4.013z"></path> 21 </svg> <span class="sr-only astro-xfej6wit">Steve Xu on Twitter</span> </a><a href="mailto:[email protected]" class="group inline-block hover:text-skin-accent link-button astro-xfej6wit" title="Send an email to Steve Xu" target="_blank"> <svg 22 xmlns="http://www.w3.org/2000/svg" 23 class="icon-tabler" 24 stroke-linecap="round" 25 stroke-linejoin="round" 26 > 27 <path stroke="none" d="M0 0h24v24H0z" fill="none"></path> 28 <rect x="3" y="5" width="18" height="14" rx="2"></rect> 29 <polyline points="3 7 12 13 21 7"></polyline> 30 </svg> <span class="sr-only astro-xfej6wit">Send an email to Steve Xu</span> </a> </div> <div class="copyright-wrapper astro-sz7xmlte"> <span class="astro-sz7xmlte">Copyright © 2024</span> <span class="separator astro-sz7xmlte"> | </span> <span class="astro-sz7xmlte">All rights reserved.</span> <span class="separator astro-sz7xmlte"> | </span> <span class="astro-sz7xmlte">Powered by <a href="https://astro.build" target="_blank" class="astro-sz7xmlte">Astro</a></span> </div> </div> </footer>
30<script src="/toggle-theme.js" async></script>
30
30<script async src="https://www.google-analytics.com/analytics.js"></script>
30
30<script async>(function(){const id = "UA-138883536-1"; 31 32 window.ga = 33 window.ga || 34 function () { 35 (window.ga.q = window.ga.q || []).push(arguments); 36 }; 37 window.ga.l = +new Date(); 38 window.ga("create", id, "auto"); 39 window.ga("set", "anonymizeIp", true); 40 window.ga("send", "pageview"); 41})();</script>
41
41<script async>(function(){const apiKey = "da1a9b67ea6a904027cfc8b581c0086c"; 42 43 !(function () { 44 "use strict"; 45 !(function (e, t) { 46 var n = e.amplitude || { _q: [], _iq: {} }; 47 if (n.invoked) 48 e.console && 49 console.error && 50 console.error("Amplitude snippet has been loaded."); 51 else { 52 var r = function (e, t) { 53 e.prototype[t] = function () { 54 return ( 55 this._q.push({ 56 name: t, 57 args: Array.prototype.slice.call(arguments, 0), 58 }), 59 this 60 ); 61 }; 62 }, 63 s = function (e, t, n) { 64 return function (r) { 65 e._q.push({ 66 name: t, 67 args: Array.prototype.slice.call(n, 0), 68 resolve: r, 69 }); 70 }; 71 }, 72 o = function (e, t, n) { 73 e[t] = function () { 74 if (n) 75 return { 76 promise: new Promise( 77 s(e, t, Array.prototype.slice.call(arguments)), 78 ), 79 }; 80 }; 81 }, 82 i = function (e) { 83 for (var t = 0; t < m.length; t++) o(e, m[t], !1); 84 for (var n = 0; n < g.length; n++) o(e, g[n], !0); 85 }; 86 n.invoked = !0; 87 var u = t.createElement("script"); 88 (u.type = "text/javascript"), 89 (u.integrity = 90 "sha384-x0ik2D45ZDEEEpYpEuDpmj05fY91P7EOZkgdKmq4dKL/ZAVcufJ+nULFtGn0HIZE"), 91 (u.crossOrigin = "anonymous"), 92 (u.async = !0), 93 (u.src = 94 "https://cdn.amplitude.com/libs/analytics-browser-2.0.0-min.js.gz"), 95 (u.onload = function () { 96 e.amplitude.runQueuedFunctions || 97 console.log("[Amplitude] Error: could not load SDK"); 98 }); 99 var a = t.getElementsByTagName("script")[0]; 100 a.parentNode.insertBefore(u, a); 101 for ( 102 var c = function () { 103 return (this._q = []), this; 104 }, 105 p = [ 106 "add", 107 "append", 108 "clearAll", 109 "prepend", 110 "set", 111 "setOnce", 112 "unset", 113 "preInsert", 114 "postInsert", 115 "remove", 116 "getUserProperties", 117 ], 118 l = 0; 119 l < p.length; 120 l++ 121 ) 122 r(c, p[l]); 123 n.Identify = c; 124 for ( 125 var d = function () { 126 return (this._q = []), this; 127 }, 128 f = [ 129 "getEventProperties", 130 "setProductId", 131 "setQuantity", 132 "setPrice", 133 "setRevenue", 134 "setRevenueType", 135 "setEventProperties", 136 ], 137 v = 0; 138 v < f.length; 139 v++ 140 ) 141 r(d, f[v]); 142 n.Revenue = d; 143 var m = [ 144 "getDeviceId", 145 "setDeviceId", 146 "getSessionId", 147 "setSessionId", 148 "getUserId", 149 "setUserId", 150 "setOptOut", 151 "setTransport", 152 "reset", 153 "extendSession", 154 ], 155 g = [ 156 "init", 157 "add", 158 "remove", 159 "track", 160 "logEvent", 161 "identify", 162 "groupIdentify", 163 "setGroup", 164 "revenue", 165 "flush", 166 ]; 167 i(n), 168 (n.createInstance = function (e) { 169 return (n._iq[e] = { _q: [] }), i(n._iq[e]), n._iq[e]; 170 }), 171 (e.amplitude = n); 172 } 173 })(window, document); 174 })(); 175 window.amplitude.init(apiKey); 176})();</script>
176
176<script defer src="https://eu.umami.is/script.js" data-website-id="6ca6aa2c-2898-47e1-8747-6c29b3c1626c"></script>
176 </body> </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.