PageSourceSearch

https://shilun-allan-li.github.io/about/

html shilun-allan-li.github.io collected 2026-10-03 09:56:30 UTC 29,948 bytes, 2 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en"><head><title>About | Shilun (Allan) Li</title><meta name="generator" content="Jekyll v4.4.1" /><meta property="og:title" content="About" /><meta name="author" content="Shilun (Allan) Li" /><meta property="og:locale" content="en" /><meta name="description" content="Personal academic website of Shilun (Allan) Li." /><meta name="twitter:description" property="og:description" content="Personal academic website of Shilun (Allan) Li." /><link rel="canonical" href="https://shilun-allan-li.github.io/about/" /><meta property="og:url" content="https://shilun-allan-li.github.io/about/" /><meta property="og:site_name" content="Shilun (Allan) Li" /><meta property="og:type" content="website" /><meta name="twitter:card" content="summary" /><meta name="twitter:title" content="About" /> 
2<script type="application/ld+json"> {"@context":"https://schema.org","@type":"WebSite","author":{"@type":"Person","name":"Shilun (Allan) Li"},"description":"Personal academic website of Shilun (Allan) Li.","headline":"About","name":"Shilun (Allan) Li","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://shilun-allan-li.github.io/assets/img/profile.jpg"},"name":"Shilun (Allan) Li"},"url":"https://shilun-allan-li.github.io/about/"}</script>
2<meta name="theme-color" content="rgb(25,55,71)"><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><meta http-equiv="x-ua-compatible" content="ie=edge"><meta name="mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-title" content="Shilun (Allan) Li"><meta name="apple-mobile-web-app-status-bar-style" content="default"><meta name="application-name" content="Shilun (Allan) Li"><meta name="generator" content="Hydejack v9.1.6" /><link rel="alternate" href="https://shilun-allan-li.github.io/about/" hreflang="en"><link type="application/atom+xml" rel="alternate" href="https://shilun-allan-li.github.io/feed.xml" title="Shilun (Allan) Li" /><link rel="shortcut icon" href="/assets/icons/favicon.ico"><link rel="apple-touch-icon" href="/assets/icons/icon-192x192.png"><link rel="manifest" href="/assets/site.webmanifest"><link rel="preload" href="/assets/img/swipe.svg" as="image" id="_hrefSwipeSVG"><link rel="dns-prefetch" href="/assets/js/search-worker-9.1.6.js" as="worker" id="_hrefSearch"><link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
vendor: 64 bytes, line 2
2 <script async src="https://www.googletagmanager.com/gtag/js?id=
2UA-68290006-3
vendor: 12 bytes, line 2
2"></script> 
2<script> 
vendor: 127 bytes, line 2
2window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', '
2UA-68290006-3
vendor: 4 bytes, line 2
2'); 
2</script>
2 
2<script>!function(r,c){"use strict";function a(e,t,n,o){e.addEventListener?e.addEventListener(t,n,o):e.attachEvent?e.attachEvent("on"+t,n):e["on"+t]=n}r.loadJS=function(e,t){var n=c.createElement("script"),e=(n.src=e,t&&a(n,"load",t,{once:!0}),c.scripts[0]);return e.parentNode.insertBefore(n,e),n},r._loaded=!1,r.loadJSDeferred=function(e,t){var n=c.createElement("script");function o(){r._loaded=!0,t&&a(n,"load",t,{once:!0});var e=c.scripts[0];e.parentNode.insertBefore(n,e)}return n.src=e,r._loaded?o():a(r,"load",o,{once:!0}),n},r.setRel=r.setRelStylesheet=function(e){a(c.getElementById(e),"load",function(){this.rel="stylesheet"},{once:!0})}}(window,document); !function(a){"use strict";var b=function(b,c,d){function e(a){return h.body?a():void setTimeout(function(){e(a)})}function f(){i.addEventListener&&i.removeEventListener("load",f),i.media=d||"all"}var g,h=a.document,i=h.createElement("link");if(c)g=c;else{var j=(h.body||h.getElementsByTagName("head")[0]).childNodes;g=j[j.length-1]}var k=h.styleSheets;i.rel="stylesheet",i.href=b,i.media="only x",e(function(){g.parentNode.insertBefore(i,c?g:g.nextSibling)});var l=function(a){for(var b=i.href,c=k.length;c--;)if(k[c].href===b)return a();setTimeout(function(){l(a)})};return i.addEventListener&&i.addEventListener("load",f),i.onloadcssdefined=l,l(f),i};"undefined"!=typeof exports?exports.loadCSS=b:a.loadCSS=b}("undefined"!=typeof global?global:this); !function(a){if(a.loadCSS){var b=loadCSS.relpreload={};if(b.support=function(){try{return a.document.createElement("link").relList.supports("preload")}catch(b){return!1}},b.poly=function(){for(var b=a.document.getElementsByTagName("link"),c=0;c<b.length;c++){var d=b[c];"preload"===d.rel&&"style"===d.getAttribute("as")&&(a.loadCSS(d.href,d,d.getAttribute("media")),d.rel=null)}},!b.support()){b.poly();var c=a.setInterval(b.poly,300);a.addEventListener&&a.addEventListener("load",function(){b.poly(),a.clearInterval(c)}),a.attachEvent&&a.attachEvent("onload",function(){a.clearInterval(c)})}}}(this); !function(w) { w._baseURL = '/'; w._publicPath = '/assets/js/'; w._noPushState = false; w._noDrawer = false; w._noNavbar = true; w._noToc = false; w._noSearch = true; w._advertise = false; w._search = { DATA_URL: '/assets/sitedata.json?no-cache', STORAGE_KEY: 'mini-search/', INDEX_KEY: 'index--2026-07-28T03:52:15+00:00', }; }(window);</script>
2<style id="_styleInline"> .clearfix,.sidebar-social::after{content:"";display:table;clear:both}.color-transition,.content .avatar,.nav-btn,.nav-btn-bar,.navbar,.message,.note-sm,#markdown-toc,.note,.hr-bottom,.hr-after::after,hr,.hr,p,body{transition:none}#_dark-mode{font-size:1.25rem}@media screen{body.light-mode{--body-color: #333;--body-bg: #fff;--border-color: #ebebeb;--gray: #777;--gray-bg: rgba(0, 0, 0, 0.025);--gray-text: #666;--menu-text: #bbb;--inv-body-color: #ccc;--inv-body-bg: var(--dark-mode-body-bg)}body.light-mode .content{-webkit-font-smoothing:initial;-moz-osx-font-smoothing:initial}body.dark-mode{--body-color: #ccc;--body-bg: var(--dark-mode-body-bg);--border-color: var(--dark-mode-border-color);--gray: rgba(255,255,255,.5);--gray-bg: rgba(255,255,255,.05);--gray-text: rgba(255,255,255,.625);--menu-text: rgba(255,255,255,.25);--inv-body-color: #333;--inv-body-bg: #fff}body.dark-mode .content{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}}html{--font-family: system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, Arial, sans-serif;--font-family-heading: system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, Arial, sans-serif;--code-font-family: ui-monospace, Menlo, Monaco, Cascadia Mono, Segoe UI Mono, Roboto Mono, Oxygen Mono, Ubuntu Monospace, Source Code Pro, Fira Mono, Droid Sans Mono, Courier New, monospace;--body-color: #333;--body-bg: #fff;--border-color: #ebebeb;--gray: #777;--gray-bg: rgba(0, 0, 0, 0.025);--gray-text: #666;--menu-text: #bbb;--inv-body-color: #ccc;--inv-body-bg: var(--dark-mode-body-bg)}html .content{-webkit-font-smoothing:initial;-moz-osx-font-smoothing:initial}html{--root-font-size: 15px;--root-font-size-medium: 16px;--root-font-size-large: 17px;--root-font-size-print: 8pt;--root-line-height: 1.75;--font-weight: 400;--font-weight-bold: 700;--font-weight-heading: 700;--content-width-5: 58rem;--content-margin-5: 4rem;--sidebar-width: 21rem;--half-content: 33rem;--break-point-3: 64em;--break-point-5: 86em;--break-point-dynamic: 1728px}*{box-sizing:border-box}html,body{margin:0;padding:0}html{font-family:var(--font-family);font-size:var(--root-font-size);line-height:var(--root-line-height)}body{color:var(--body-color);background-color:var(--body-bg);font-weight:var(--font-weight);overflow-y:scroll}.content img,.img,.content video,.video{max-width:100%;height:auto}.lead{margin-left:-1rem;margin-right:-1rem;margin-bottom:1.5rem}img.lead,video.lead{display:block;max-width:calc(100% + 2rem);width:calc(100% + 2rem);height:auto}.heading,.f6,h6,.h6,.f5,h5,.h5,.f4,.sidebar-nav-item,h4,.h4,.post-date,.f3,h3,.h3,.f2,h2,.h2,.f1,h1,.h1{font-family:var(--font-family-heading);font-weight:var(--font-weight-heading)}.f1,h1,.h1{font-size:2rem;line-height:1.3}.f2,h2,.h2{font-size:1.5rem;line-height:1.4}.f3,h3,.h3{font-size:1.2em;line-height:1.5}.f4,.sidebar-nav-item,h4,.h4,.post-date{font-size:1.08rem;line-height:1.6}.f5,h5,.h5{font-size:1.04rem;line-height:1.7}.f6,h6,.h6{font-size:1rem}.content h1>a,.content .h1>a{text-decoration:none;border-bottom:none}@media screen and (max-width: 42em){.content h1,.content .h1{font-size:1.7rem;line-height:1.35}}@media screen and (min-width: 86em){.content h1,.content .h1{font-size:2.4rem;line-height:1.25}}@media screen and (min-width: 1728px){body:not(.no-large-headings) .content h1,body:not(.no-large-headings) .content .h1{width:calc(100% + 50vw - 32rem);font-size:3rem;line-height:1.2}}@media screen and (min-width: 124em){body:not(.no-large-headings) .content h1,body:not(.no-large-headings) .content .h1{font-size:4rem;line-height:1.1}}h1,h2,h3,.h1,.h2,.h3{margin:4rem 0 1rem}h4,h5,h6,.h4,.post-date,.h5,.h6{margin:3rem 0 .5rem}p{margin-top:0;margin-bottom:1rem}p.lead{font-size:1.2em;margin-top:1.5rem;margin-bottom:1.5rem;padding:0 1rem}ul,ol,dl{margin-top:0;margin-bottom:1rem}ul,ol{padding-left:1.25rem}hr,.hr{border:0;margin:1rem 0;border-top:1px solid var(--border-color)}.hr-after::after{content:"";display:block;margin:1rem 0;border-top:1px solid var(--border-color)}.hr-bottom{border-bottom:1px solid var(--border-color);padding-bottom:.75rem;margin-bottom:1rem}.page{margin-bottom:3em}.page li+li{margin-top:.25rem}.page>header{position:relative;margin-bottom:2rem}@media screen and (min-width: 1728px){body:not(.no-third-column) .page>header>.lead+.note-sm,body:not(.no-third-column) .page>header>.lead+#markdown-toc,body:not(.no-third-column) .page>header>.lead+.note,body:not(.no-third-column) .page>header>a.no-hover+.note-sm,body:not(.no-third-column) .page>header>a.no-hover+#markdown-toc,body:not(.no-third-column) .page>header>a.no-hover+.note{position:absolute;right:-25rem;width:21rem;bottom:0;margin-bottom:0}}.page-title,.post-title{margin-top:0}.post-date{display:flex;justify-content:space-between;margin-top:-0.6rem;height:2rem;margin-bottom:.85rem;color:var(--gray)}.post-date>.ellipsis,.post-date#breadcrumbs>ul{cursor:pointer}.post-date [class^=icon-]{display:inline-block;font-size:smaller;margin-right:.25rem}.related-posts{padding-left:0;list-style:none;margin-bottom:2rem}.related-posts>li,.related-posts>li+li{margin-top:1rem}.message,.note-sm,#markdown-toc,.note{margin-bottom:1rem;padding:1rem;color:var(--gray-text);background-color:var(--gray-bg);margin-left:-1rem;margin-right:-1rem}.note-sm,#markdown-toc,.note{background:rgba(0,0,0,0);color:var(--body-color);font-size:smaller;border-left:1px solid var(--border-color);padding:1.2rem 1rem 0 1rem;margin:1rem -1rem;position:relative}.note-sm:before,#markdown-toc:before,.note:before{font-size:.667rem;font-weight:bold;font-style:normal;letter-spacing:.025rem;text-transform:uppercase;color:var(--menu-text);position:absolute;top:0}.note-sm[title]:before,[title]#markdown-toc:before,[title].note:before{content:attr(title) !important}.note{font-size:1rem}@media screen{body::before{content:"";width:.5rem;background:var(--gray-bg);position:fixed;left:0;top:0;bottom:0}}@media(min-width: 64em){body::before{width:21rem}}@media(min-width: 1728px){body::before{width:calc(50% - 33rem)}}@media screen and (min-width: 42em){html{font-size:var(--root-font-size-medium)}}@media screen and (min-width: 124em){html{font-size:var(--root-font-size-large)}}#breadcrumbs>ul{height:1rem;margin:-1.5rem 0 .5rem;padding:0;font-size:.667rem;color:var(--menu-text);text-transform:uppercase;width:100%;list-style:none}#breadcrumbs>ul>li{display:inline}#breadcrumbs>ul>li a{color:var(--gray);text-decoration:none;border-bottom:none}.fl{float:left}.fr{float:right}.mb4{margin-bottom:4rem}.mb6{margin-bottom:6rem}.mt0{margin-top:0}.mt1{margin-top:1rem}.mt2{margin-top:2rem}.mt3{margin-top:3rem}.mt4{margin-top:4rem}.pb0{padding-bottom:0}.ml1{margin-left:1rem}.mr1{margin-right:1rem}.sixteen-nine{position:relative}.sixteen-nine::before{display:block;content:"";width:100%;padding-top:56.25%}.sixteen-nine>*{position:absolute;top:0;left:0;right:0;bottom:0}.sixteen-ten{position:relative}.sixteen-ten::before{display:block;content:"";width:100%;padding-top:62.5%}.sixteen-ten>*{position:absolute;top:0;left:0;right:0;bottom:0}.four-three{position:relative}.four-three::before{display:block;content:"";width:100%;padding-top:75%}.four-three>*{position:absolute;top:0;left:0;right:0;bottom:0}.sr-only{display:none}.larger{font-size:larger}.smaller{font-size:smaller}.clearfix,.sidebar-social::after{content:"";display:table;clear:both}.ellipsis,#breadcrumbs>ul{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.border{border:1px solid var(--border-color)}@media(min-width: 42em){.border-radius,.lead,.page .aspect-ratio.sixteen-nine.lead{border-radius:.5rem}}.fallback-img{background-position:center;background-repeat:no-repeat;background-image:url("data:image/svg+xml;
2base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMTYwIiBoZWlnaHQ9IjkwIiB2aWV3Qm94PSIwIDAgMTYwIDkwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuMDQ4ODI4LCAwLCAwLCAwLjA0Nzk5MSwgNTQuOTk5OTczLCAyMC40MjgxNDgpIj4KICAgIDxwYXRoIHN0eWxlPSJmaWxsOnJnYmEoMTI4LDEyOCwxMjgsLjMzKSIgZD0iTTk1OS44ODQgMTI4YzAuMDQwIDAuMDM0IDAuMDgyIDAuMDc2IDAuMTE2IDAuMTE2djc2Ny43N2MtMC4wMzQgMC4wNDAtMC4wNzYgMC4wODItMC4xMTYgMC4xMTZoLTg5NS43N2MtMC4wNDAtMC4wMzQtMC4wODItMC4wNzYtMC4xMTQtMC4xMTZ2LTc2Ny43NzJjMC4wMzQtMC4wNDAgMC4wNzYtMC4wODIgMC4xMTQtMC4xMTRoODk1Ljc3ek05NjAgNjRoLTg5NmMtMzUuMiAwLTY0IDI4LjgtNjQgNjR2NzY4YzAgMzUuMiAyOC44IDY0IDY0IDY0aDg5NmMzNS4yIDAgNjQtMjguOCA2NC02NHYtNzY4YzAtMzUuMi0yOC44LTY0LTY0LTY0djB6Ii8+CiAgICA8cGF0aCBzdHlsZT0iZmlsbDpyZ2JhKDEyOCwxMjgsMTI4LC4zMykiIGQ9Ik04MzIgMjg4YzAgNTMuMDIwLTQyLjk4IDk2LTk2IDk2cy05Ni00Mi45OC05Ni05NiA0Mi45OC05NiA5Ni05NiA5NiA0Mi45OCA5NiA5NnoiLz4KICAgIDxwYXRoIHN0eWxlPSJmaWxsOnJnYmEoMTI4LDEyOCwxMjgsLjMzKSIgZD0iTTg5NiA4MzJoLTc2OHYtMTI4bDIyNC0zODQgMjU2IDMyMGg2NGwyMjQtMTkyeiIvPgogIDwvZz4KPC9zdmc+")}hy-push-state a{color:var(--body-color)}@supports not ((text-decoration-thickness: initial) and (text-underline-offset: initial)){hy-push-state a{text-decoration:none;border-bottom:2px solid}}@supports(text-decoration-thickness: initial) and (text-underline-offset: initial){hy-push-state a{text-decoration-style:solid;text-underline-offset:.35rem;text-decoration-thickness:2px}}hy-push-state a.no-hover{border-bottom:none;text-decoration-thickness:unset;text-underline-offset:unset}@supports(text-decoration-thickness: initial) and (text-underline-offset: initial){.content a:not(.btn):not(.no-hover){text-decoration-color:var(--accent-color-faded)}}.content a:not(.btn):not(.no-hover){border-color:var(--accent-color-faded)}.content .aspect-ratio{overflow:hidden}.content .aspect-ratio img{margin:0;width:100%;height:100%;background-color:var(--gray-bg)}hy-drawer{width:100%;position:relative;overflow:hidden;display:block;z-index:4}@media screen and (min-width: 64em){hy-drawer{position:fixed;width:21rem;top:0;left:0;bottom:0;margin-left:0}hy-drawer.cover{position:relative;width:100%}}@media screen and (min-width: 1728px){hy-drawer{width:calc(50% - 33rem)}}.sidebar{position:relative;display:flex;justify-content:center;align-items:center;color:rgba(255,255,255,.75);text-align:center;min-height:100vh}.sidebar.invert{color:rgba(32,32,32,.75)}.sidebar a{color:#fff;border-bottom-color:rgba(255,255,255,.2);text-decoration-color:rgba(255,255,255,.2)}.sidebar.invert a{color:#222;border-bottom-color:rgba(32,32,32,.2);text-decoration-color:rgba(32,32,32,.2)}.sidebar-bg{position:absolute;top:0;left:calc(50% - 50vw);width:100vw;height:100%;background:#202020 center/cover}.sidebar-bg::after{content:"";position:absolute;top:0;left:0;bottom:0;right:0;background:rgba(0,0,0,.05)}.sidebar-bg.sidebar-overlay::after{background:linear-gradient(to bottom, rgba(32, 32, 32, 0) 0%, rgba(32, 32, 32, 0.5) 50%, rgba(32, 32, 32, 0) 100%)}.sidebar-sticky{position:relative;z-index:3;max-width:21rem;padding:1.5rem;contain:content}.sidebar-about .avatar{margin-bottom:1.5rem}.sidebar-about>a.sidebar-title{text-decoration:none}.sidebar-about>a.sidebar-title>h2{margin:0;padding-bottom:.5rem}.sidebar-about>a.sidebar-title::after{content:"";display:block;border-bottom:2px solid;margin:0 auto .5rem;width:4rem;border-color:rgba(255,255,255,.2);transition:border-color 250ms}.sidebar-about>a.sidebar-title:hover::after{border-color:#fff;transition:border-color 50ms}.sidebar.invert .sidebar-about>a.sidebar-title::after{border-color:rgba(32,32,32,.2)}.sidebar.invert .sidebar-about>a.sidebar-title:hover::after{border-color:#222}.sidebar-nav>ul{list-style:none;padding-left:0}.sidebar-nav-item{display:inline-block;margin-bottom:.5rem}@media(min-width: 64em){#_main.no-drawer #_menu{display:none}#_main.no-drawer .nav-btn-bar>:nth-child(2){border:none}}.sidebar-social>ul{display:inline-block;list-style:none;padding-left:0;margin-bottom:0}.sidebar-social>ul>li{float:left}.sidebar-social>ul>li>a{display:inline-block;text-align:center;font-size:1.4rem;width:3rem;height:4rem;padding:.5rem 0;line-height:3rem;text-decoration:none;border-bottom-width:2px;border-bottom-style:solid}.sidebar-social>ul li+li{margin-top:0}.fixed-common,.fixed-bottom,.fixed-top{position:fixed;left:0;width:100%;z-index:2}.fixed-top{top:0}.fixed-bottom{bottom:0}.navbar>.content{position:relative;padding-top:0;padding-bottom:0;min-height:0;max-height:5rem}.nav-btn-bar{margin:0 -1rem;background-color:#fff;background-color:var(--body-bg);height:5rem;display:flex;align-items:center;position:relative}.nav-btn-bar>:first-child,.nav-btn-bar>:last-child{border:none}.nav-btn{background:none;border:none;text-decoration:none;display:flex;align-items:center;justify-content:center;width:3.25rem;height:5rem;color:var(--menu-text);border-right:1px solid var(--border-color);border-left:1px solid var(--border-color);margin-left:-1px}
2#markdown-toc{margin:2rem -1rem 2rem calc(-1rem + 1px);padding-left:2.5rem;padding-bottom:.5rem}#markdown-toc:before{left:1rem}@media screen and (min-width: 1728px){body:not(.no-toc) #markdown-toc{position:absolute;z-index:4;width:20.5rem;right:0;margin:auto;overflow:auto}}@media screen and (min-width: 1728px){body.no-break-layout:not(.no-toc) #markdown-toc{width:calc(50% - 33rem)}}.content{margin-left:auto;margin-right:auto;padding:8rem 1rem 12rem}@media screen{.content{padding-left:1.5rem;min-height:100vh}}@media screen and (min-width: 42em){.content{max-width:44rem}}@media screen and (min-width: 54em){.content{max-width:52rem}}@media screen and (min-width: 64em){.content{padding-left:1rem;margin-left:24rem;margin-right:3rem}}@media screen and (min-width: 86em){.content{padding-top:9rem;margin-left:25rem;margin-right:4rem;max-width:58rem}}@media screen and (min-width: 1728px){.content{margin:auto}}.large-only{display:none}@media screen and (min-width: 1728px){.large-only{display:block}}.avatar{width:7rem;height:7rem;border-radius:100%;overflow:hidden;display:inline-block}.avatar img{width:100%}.content .avatar{float:right;box-sizing:content-box;border:1rem solid var(--body-bg);transition:border-color 1s ease;margin-top:-1.5rem;margin-right:-1rem}.no-navbar .content{padding-top:4rem}.note:before{content:"Note"}.page>header>.note-sm:before,.page>header>.note:before,.page>header>#markdown-toc:before{content:"Description"}#markdown-toc:before{content:"Table of Contents"}.layout-resume .note-sm:before,.layout-resume .note:before,.layout-resume #markdown-toc:before{content:"Summary"} .clearfix,main:not(.layout-resume) .columns::after{content:"";display:table;clear:both}.color-transition,main:not(.layout-resume) .project-card{transition:none}main:not(.layout-resume) .columns{margin-left:-1rem;display:flex;flex-wrap:wrap;contain:content;padding-top:1rem;margin-top:1rem;padding-right:1rem;margin-right:-1rem}main:not(.layout-resume) .column{float:left;padding-left:1rem;margin-bottom:2rem;width:100%;display:flex}@media screen and (min-width: 42em){main:not(.layout-resume) .columns{margin-left:-2rem;margin-right:-2rem}main:not(.layout-resume) .column-1-2{width:50%}}@media screen and (min-width: 1728px){main:not(.layout-resume) .columns-break{width:calc(50vw + 27rem)}main:not(.layout-resume) .columns-break>.column-1-2,main:not(.layout-resume) .columns-break>.column-1{width:29.5rem}}@media print{main:not(.layout-resume) .columns{display:block}main:not(.layout-resume) .column{display:block;width:50%}}main:not(.layout-resume) .project-card{width:100%;color:var(--gray-text);background-color:var(--gray-bg);padding-bottom:1rem;position:relative;overflow:hidden;box-shadow:.125rem .125rem 1rem rgba(0,0,0,.2);contain:content;border-radius:.5rem;page-break-inside:avoid;transition:transform 500ms ease;will-change:transform}main:not(.layout-resume) .project-card:hover{transform:translateY(-0.25rem);transition:transform 250ms ease}main:not(.layout-resume) .project-card>a.flip-project{display:block}main:not(.layout-resume) .project-card>a.flip-project .project-card-img{margin-bottom:0}main:not(.layout-resume) .project-card>a.flip-project .project-card-img img{display:block;border-top-left-radius:.5rem;border-top-right-radius:.5rem}main:not(.layout-resume) .project-card a{position:relative;z-index:1}main:not(.layout-resume) .project-card a.fill-card{position:absolute;top:0;left:0;right:0;bottom:0;z-index:0}main:not(.layout-resume) .project-card>.project-card-title,main:not(.layout-resume) .project-card>.project-card-text{text-align:center;padding:0 1rem}main:not(.layout-resume) .project-card>.project-card-title{display:block;font-size:1.08rem;margin-top:.75rem;margin-bottom:.25rem;color:inherit}main:not(.layout-resume) .project-card>.project-card-text{margin:.25rem 0}main:not(.layout-resume) .column-1>.project-card>.project-card-title{font-size:1.2rem}main:not(.layout-resume) .column-1>.project-card>.project-card-text{font-size:1rem}</style><link rel="preload" as="style" href="/assets/css/hydejack-9.1.6.css" id="_stylePreload"><link rel="preload" as="style" href="/assets/icomoon/style.css" id="_iconsPreload"> 
2<script> setRel('_stylePreload'); setRel('_iconsPreload'); /**/ </script>
2 <noscript><link rel="stylesheet" href="/assets/css/hydejack-9.1.6.css"><link rel="stylesheet" href="/assets/icomoon/style.css"> </noscript><style id="_pageStyle"> html{--accent-color: rgb(79,177,186);--accent-color-faded: rgba(79, 177, 186, 0.5);--accent-color-highlight: rgba(79, 177, 186, 0.1);--accent-color-darkened: rgb(25.0432172869%, 60.6118447379%, 63.8783513405%);--theme-color: rgb(25,55,71);--dark-mode-body-bg: hsl(200.8695652174, 5.9895833333%, 17.5%);--dark-mode-border-color: hsl(200.8695652174, 5.9895833333%, 22.5%)}</style><link rel="dns-prefetch" href="https://assets.gumroad.com"> 
2<script type="module"> const loadJS = x => new Promise(r => window.loadJS(x).addEventListener('load', r)); let p1, p2, io1, io2, embedCreated, overlayCreated; document.querySelector('hy-push-state').addEventListener('load', () => { io1 ||= new IntersectionObserver(async (entries) => { if (entries.some(x => x.isIntersecting)) { p1 = p1 || loadJS('https://gumroad.com/js/gumroad-embed.js'); await p1; !embedCreated && await new Promise(function check1(res) { if (typeof createGumroadEmbed !== 'undefined') { embedCreated = 1; res(createGumroadEmbed()); } else setTimeout(() => check1(res), 200); }); await new Promise(function check2(res) { if (typeof GumroadEmbed !== 'undefined') res(GumroadEmbed.reload()); else setTimeout(() => check2(res), 200); }); } }, { rootMargin: '1440px' }); io2 ||= new IntersectionObserver(async (entries) => { if (entries.some(x => x.isIntersecting)) { p2 = p2 || loadJS('https://gumroad.com/js/gumroad.js'); await p2; !overlayCreated && await new Promise(function check(res) { if (typeof createGumroadOverlay !== 'undefined') { overlayCreated = 1; res(createGumroadOverlay()); } else setTimeout(() => check(res), 200); }); } }, { rootMargin: '300px' }); document.querySelectorAll('.gumroad-product-embed').forEach(el => io1.observe(el)); document.querySelectorAll('.gumroad-button').forEach(el => io2.observe(el)); }); </script>
2<body class="no-break-layout no-navbar"> <hy-push-state id="_pushState" replace-selector="#_main" link-selector="a[href]:not([href^='/assets/']):not(.external):not(.no-push-state)" script-selector="script" duration="500" hashchange ><main id="_main" class="content layout-welcome" role="main" ><nav id="breadcrumbs" class="screen-only"><ul><li><a href="/">home</a><li> <span>/</span> <span>about</span></ul></nav><article class="page mb6" role="article"><header><h1 class="page-title">About</h1><div class="hr pb0"></div></header><p>I am a fourth-year Ph.D. student in <a href="https://math.berkeley.edu/">Mathematics</a> at UC Berkeley, advised by Prof. <a href="https://people.eecs.berkeley.edu/~venkatg/">Venkatesan Guruswami</a>. Previously, I graduated from <a href="http://stanford.edu">Stanford University</a> with a Bachelor’s degree in Mathematics with honors and a concurrent Master’s degree in Computer Science (AI track).<p>My research interests lie broadly in <strong>Error-Correcting Codes, Automated Theorem Proving, and Machine Learning</strong>.</article><hr class="dingbat related mb6" /><footer class="content" role="contentinfo"><hr/><p><small class="copyright">© 2026. All rights reserved. </small><nav class="legal"><small> <a class="heading flip-title" href="/LICENSE/">LICENSE</a> | <a class="heading flip-title" href="/NOTICE/">NOTICE</a> </small></nav><hr class="sr-only"/></footer></main><hy-drawer id="_drawer" class="" side="left" threshold="10" noscroll ><header id="_sidebar" class="sidebar" role="banner"><div class="sidebar-bg sidebar-overlay" style="background-color:rgb(25,55,71);background-image:url(/assets/img/sidebar-bg.jpg)"></div><div class="sidebar-sticky no-fouc"><div class="sidebar-about"> <a class="no-hover" href="/" tabindex="-1"> <img src="/assets/img/profile.jpg" class="avatar" alt="Shilun (Allan) Li" width="120" height="120" loading="lazy" /> </a> <a class="sidebar-title" href="/"><h2 class="h1">Shilun (Allan) Li</h2></a><p class=""> Mathematics PhD at UC Berkeley</div><nav class="sidebar-nav heading" role="navigation"> <span class="sr-only">Navigation:</span><ul><li><div class="list-wrapper"> <a id="_navigation" href="/" class="sidebar-nav-item" >Home</a></div><li><div class="list-wrapper"> <a href="/about/" class="sidebar-nav-item" >About</a></div><li><div class="list-wrapper"> <a href="/resume/" class="sidebar-nav-item" >Resume</a></div><li><div class="list-wrapper"> <a href="/publications/" class="sidebar-nav-item" >Publications</a></div><li><div class="list-wrapper"> <a href="/projects/tcslib/" class="sidebar-nav-item" >TCSlib</a></div></ul></nav><div class="sidebar-social"> <span class="sr-only">Social:</span><ul><li> <a href="https://github.com/Shilun-Allan-Li" title="GitHub" class="no-mark-external"> <span class="icon-github"></span> <span class="sr-only">GitHub</span> </a><li> <a href="https://scholar.google.com/citations?user=xKhyfocAAAAJ&hl=en" title="Google Scholar" class="no-mark-external"> <span class="icon-google-scholar"></span> <span class="sr-only">Google Scholar</span> </a></ul></div></div></header></hy-drawer><hr class="sr-only" hidden /> </hy-push-state> 
2<script nomodule>!function(){var t,n=document.createElement("script");!("noModule"in n)&&"onbeforeload"in n&&(t=!1,document.addEventListener("beforeload",function(e){if(e.target===n)t=!0;else if(!e.target.hasAttribute("nomodule")||!t)return;e.preventDefault()},!0),n.type="module",n.src=".",document.head.appendChild(n),n.remove())}(); </script>
2 
2<script src="/assets/js/hydejack-9.1.6.js" type="module"></script>
2 
2<script src="/assets/js/LEGACY-hydejack-9.1.6.js" nomodule defer></script>
2 
2<script src="/assets/js/sidebar-folder.js"></script>
2 
2<script src="/assets/js/clap-button.js"></script>
2 
2<script type="module"> document .getElementById("_pushState") .addEventListener("hy-push-state-load", function () { get_clap_count(); }); </script>
2 
2<script type="module"> if ('serviceWorker' in navigator) { /**/ navigator.serviceWorker.getRegistration() .then(r => r.unregister()) .catch(() => {}); /**/ } </script>
2 
2<script> document.getElementById('_pushState').addEventListener('hy-push-state-after', function (e) { function e(e){ (console.error?console.error:console.log).call(console,e) } function t(e){ return l.innerHTML='<a href="'+e.replace(/"/g,"&quot;")+'"></a>',l.childNodes[0].getAttribute("href") } function r(e,t){ var r=e.substr(t,2);return parseInt(r,16) } function n(e,n){ for(var o="",c=r(e,n),a=n+2;a<e.length;a+=2){ var l=r(e,a)^c; o+=String.fromCharCode(l) } return t(o) } var o="/cdn-cgi/l/email-protection#", c=".__cf_email__", a="data-cfemail", l=document.createElement("div"); !function(){ for(var t=document.getElementsByTagName("a"),r=0;r<t.length;r++) try{ var c=t[r],a=c.href.indexOf(o); a>-1&&(c.href="mailto:"+n(c.href,a+o.length)) }catch(t){ e(t) } }(), function(){ for(var t=document.querySelectorAll(c),r=0;r<t.length;r++) try{ var o=t[r],l=n(o.getAttribute(a),0),i=document.createTextNode(l); o.parentNode.replaceChild(i,o) }catch(t){ e(t) } }() }); </script>
2<div hidden><h2 class="sr-only">Templates (for web app):</h2><template id="_animation-template"><div class="animation-main fixed-top"><nav id="breadcrumbs" class="screen-only"><ul></ul></nav><div class="content"><div class="page"></div></div></div></template> <template id="_loading-template"><div class="loading nav-btn fr"> <span class="sr-only">Loading…</span> <span class="icon-cog"></span></div></template> <template id="_error-template"><div class="page"><h1 class="page-title">Error</h1><p class="lead"> Sorry, an error occurred while loading <a class="this-link" href=""></a>.</div></template> <template id="_permalink-template"> <a href="#" class="permalink"> <span class="sr-only">Permalink</span> <span class="content-hash"></span> </a> </template></div></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.