29 lines
24 KiB
HTML
29 lines
24 KiB
HTML
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>TOCS 2025 Digest | Publish Assistant</title><meta name=keywords content><meta name=description content="10 papers selected.
|
||
|
||
Whole-system Persistence Made Efficient with Tree-structured Checkpointing on Microkernel
|
||
Mingkai Dong, Fangnuo Wu, Gequan Mo, Haibo Chen
|
||
TL;DR — A microkernel-based whole-system persistence scheme uses tree-structured incremental checkpointing to achieve low-overhead, crash-consistent snapshots of the entire OS state.
|
||
Why notable — Whole-system persistence is a foundational building block for reliable systems; this paper shows it can be done efficiently within a microkernel architecture.
|
||
|
||
XpuTEE: A High-Performance and Practical Heterogeneous Trusted Execution Environment for GPUs
|
||
Shulin Fan, Zhichao Hua, Yubin Xia, Haibo Chen"><meta name=author content="Publish Assistant"><link rel=canonical href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/tocs-2025/><link crossorigin=anonymous href=/vincent/publish-assistant/assets/css/stylesheet.d72f07832e13c592b3edba91680bfe70f01daac396179bcace0ac36e8e0494c6.css integrity="sha256-1y8Hgy4TxZKz7bqRaAv+cPAdqsOWF5vKzgrDbo4ElMY=" rel="preload stylesheet" as=style><link rel=icon href=https://pub.sqrt.fr/vincent/publish-assistant/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://pub.sqrt.fr/vincent/publish-assistant/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://pub.sqrt.fr/vincent/publish-assistant/favicon-32x32.png><link rel=apple-touch-icon href=https://pub.sqrt.fr/vincent/publish-assistant/apple-touch-icon.png><link rel=mask-icon href=https://pub.sqrt.fr/vincent/publish-assistant/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate hreflang=en href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/tocs-2025/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><meta property="og:url" content="https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/tocs-2025/"><meta property="og:site_name" content="Publish Assistant"><meta property="og:title" content="TOCS 2025 Digest"><meta property="og:description" content="10 papers selected.
|
||
Whole-system Persistence Made Efficient with Tree-structured Checkpointing on Microkernel Mingkai Dong, Fangnuo Wu, Gequan Mo, Haibo Chen
|
||
TL;DR — A microkernel-based whole-system persistence scheme uses tree-structured incremental checkpointing to achieve low-overhead, crash-consistent snapshots of the entire OS state.
|
||
Why notable — Whole-system persistence is a foundational building block for reliable systems; this paper shows it can be done efficiently within a microkernel architecture.
|
||
XpuTEE: A High-Performance and Practical Heterogeneous Trusted Execution Environment for GPUs Shulin Fan, Zhichao Hua, Yubin Xia, Haibo Chen"><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="cloud-edge"><meta property="article:published_time" content="2025-01-01T00:00:00+00:00"><meta property="article:modified_time" content="2025-01-01T00:00:00+00:00"><meta name=twitter:card content="summary"><meta name=twitter:title content="TOCS 2025 Digest"><meta name=twitter:description content="10 papers selected.
|
||
Whole-system Persistence Made Efficient with Tree-structured Checkpointing on Microkernel Mingkai Dong, Fangnuo Wu, Gequan Mo, Haibo Chen
|
||
TL;DR — A microkernel-based whole-system persistence scheme uses tree-structured incremental checkpointing to achieve low-overhead, crash-consistent snapshots of the entire OS state.
|
||
Why notable — Whole-system persistence is a foundational building block for reliable systems; this paper shows it can be done efficiently within a microkernel architecture.
|
||
XpuTEE: A High-Performance and Practical Heterogeneous Trusted Execution Environment for GPUs Shulin Fan, Zhichao Hua, Yubin Xia, Haibo Chen"><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Edge and Cloud Systems","item":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/"},{"@type":"ListItem","position":2,"name":"Digests","item":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/"},{"@type":"ListItem","position":3,"name":"TOCS 2025 Digest","item":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/tocs-2025/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BlogPosting","headline":"TOCS 2025 Digest","name":"TOCS 2025 Digest","description":"10 papers selected.\nWhole-system Persistence Made Efficient with Tree-structured Checkpointing on Microkernel Mingkai Dong, Fangnuo Wu, Gequan Mo, Haibo Chen\nTL;DR — A microkernel-based whole-system persistence scheme uses tree-structured incremental checkpointing to achieve low-overhead, crash-consistent snapshots of the entire OS state.\nWhy notable — Whole-system persistence is a foundational building block for reliable systems; this paper shows it can be done efficiently within a microkernel architecture.\nXpuTEE: A High-Performance and Practical Heterogeneous Trusted Execution Environment for GPUs Shulin Fan, Zhichao Hua, Yubin Xia, Haibo Chen\n","keywords":[],"articleBody":"10 papers selected.\nWhole-system Persistence Made Efficient with Tree-structured Checkpointing on Microkernel Mingkai Dong, Fangnuo Wu, Gequan Mo, Haibo Chen\nTL;DR — A microkernel-based whole-system persistence scheme uses tree-structured incremental checkpointing to achieve low-overhead, crash-consistent snapshots of the entire OS state.\nWhy notable — Whole-system persistence is a foundational building block for reliable systems; this paper shows it can be done efficiently within a microkernel architecture.\nXpuTEE: A High-Performance and Practical Heterogeneous Trusted Execution Environment for GPUs Shulin Fan, Zhichao Hua, Yubin Xia, Haibo Chen\nTL;DR — XpuTEE extends trusted execution environments to GPUs by designing a hardware-assisted isolation mechanism that protects GPU computations with low performance overhead.\nWhy notable — As GPUs process sensitive ML workloads in shared clouds, TEE support for accelerators is urgently needed; XpuTEE is a comprehensive and practical solution.\nRegVault II: Achieving Hardware-Assisted Selective Kernel Data Randomization for Multiple Architectures Ruorong Guo, Yangye Zhou, Jinyan Xu, Wenbo Shen et al.\nTL;DR — RegVault II uses hardware features to selectively randomize sensitive kernel data structures at runtime across multiple ISAs, raising the bar for kernel exploitation.\nWhy notable — Kernel data-only attacks bypass existing code-randomization defenses; this work’s multi-architecture approach makes selective data randomization practical for production kernels.\nValidating JIT Compilers via Compilation Space Exploration Cong Li, Yanyan Jiang, Chang Xu, Zhendong Su\nTL;DR — Compilation space exploration systematically generates and tests the large space of valid JIT compilation outcomes to find miscompilation bugs in production JIT compilers.\nWhy notable — JIT correctness is notoriously hard to test; this paper’s systematic exploration strategy finds real bugs in widely-used runtimes and advances the state of compiler validation.\nFreezing-based Memory and Process Co-design for User Experience on Resource-limited Mobile Devices Changlong Li, Zongwei Zhu, Chun Jason Xue, Yu Liang et al.\nTL;DR — A co-designed memory and process management scheme freezes background processes at fine granularity to reclaim memory while preserving fast resume latency on constrained mobile hardware.\nWhy notable — Mobile memory pressure directly degrades user experience; this paper’s co-design perspective yields measurable improvements on real devices with limited resources.\nAnalyzing Configuration Dependencies of File Systems Tabassum Mahmud, Om Rameshwar Gatla, Duo Zhang, Carson Love et al.\nTL;DR — This work systematically analyzes the dependency graph among file-system configuration options to reveal hidden interactions that lead to silent data corruption or crashes.\nWhy notable — File-system misconfiguration is a major source of data loss in practice; understanding configuration dependencies is essential for building safer storage systems.\nEfficient Fault Tolerance for Stateful Serverless Computing with Asymmetric Logging Sheng Qi, Haoyu Feng, Xuanzhe Liu, Xin Jin\nTL;DR — Asymmetric logging decouples the logging cost between the fast and slow paths of stateful serverless functions, enabling low-overhead fault tolerance without sacrificing recovery guarantees.\nWhy notable — Fault tolerance for stateful serverless remains an open performance challenge; this paper’s asymmetric design significantly reduces logging overhead compared to symmetric approaches.\nTowards Serialization/Deserialization-free State Transfer in Serverless Workflows Xingda Wei, Fangming Lu, Zhuobin Huang, Rong Chen et al.\nTL;DR — This system eliminates serialization and deserialization costs when passing state between serverless functions by enabling direct in-memory state transfer across workflow stages.\nWhy notable — Ser/deser overhead is a dominant cost in serverless workflows; removing it fundamentally changes the performance profile of function chaining at scale.\nEnabling Anonymous Online Streaming Analytics at the Network Edge Yunming Xiao, Yanqi Gu, Yibo Zhao, Sen Lin et al.\nTL;DR — This paper designs an edge-based streaming analytics framework that enforces differential privacy while processing high-throughput data streams with low latency.\nWhy notable — Privacy-preserving analytics at the edge is increasingly required by regulation and user expectation; this system shows it can be done at practical streaming throughputs.\nLCL+: a Lock Chain Length-based Distributed Deadlock Detection and Resolution Service Built for OceanBase Zhenkun Yang, Chen Qian, Xuwang Teng, Fanyu Kong et al.\nTL;DR — LCL+ detects and resolves distributed deadlocks in the OceanBase database by tracking lock-chain lengths across nodes, achieving low overhead with fast detection latency.\nWhy notable — Deadlock detection in large-scale distributed databases is an unsolved production problem; this paper presents a battle-tested algorithm deployed in a major commercial system.\n","wordCount":"686","inLanguage":"en","datePublished":"2025-01-01T00:00:00Z","dateModified":"2025-01-01T00:00:00Z","author":{"@type":"Person","name":"Publish Assistant"},"mainEntityOfPage":{"@type":"WebPage","@id":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/tocs-2025/"},"publisher":{"@type":"Organization","name":"Publish Assistant","logo":{"@type":"ImageObject","url":"https://pub.sqrt.fr/vincent/publish-assistant/favicon.ico"}}}</script></head><body id=top><header class=header><nav class=header-nav><div class=logo><a href=https://pub.sqrt.fr/vincent/publish-assistant/ accesskey=h title="Publish Assistant (Alt + H)">Publish Assistant</a>
|
||
<span class=logo-sep>/</span>
|
||
<a class=logo-topic href=/vincent/publish-assistant/cloud-edge/ title="Edge and Cloud Systems">Edge and Cloud Systems</a><div class=logo-switches><button id=theme-toggle class=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
|
||
<svg class="moon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
|
||
<svg class="sun" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu class=menu><li><a href=/vincent/publish-assistant/cloud-edge/venues/ title=Venues><span>Venues</span></a></li><li><a href=/vincent/publish-assistant/cloud-edge/calendar/ title=Calendar><span>Calendar</span></a></li><li><a href=/vincent/publish-assistant/cloud-edge/digests/ title=Digests><span class=active>Digests</span></a></li></ul></nav></header><main class=main><article class=post-single><header class=post-header><nav class=breadcrumbs role=navigation aria-label=Breadcrumb><a href=/vincent/publish-assistant/cloud-edge/digests/>Digests</a>
|
||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"><polyline points="9 18 15 12 9 6"/></svg></nav><h1 class="post-title entry-hint-parent">TOCS 2025 Digest</h1><div class=post-meta><span title='2025-01-01 00:00:00 +0000 UTC'>January 1, 2025</span> · <span>Publish Assistant</span></div></header><div class="post-content md-content"><p>10 papers selected.</p><hr><h3 id=whole-system-persistence-made-efficient-with-tree-structured-checkpointing-on-microkernel>Whole-system Persistence Made Efficient with Tree-structured Checkpointing on Microkernel<a hidden class=anchor aria-hidden=true href=#whole-system-persistence-made-efficient-with-tree-structured-checkpointing-on-microkernel>#</a></h3><p><em>Mingkai Dong, Fangnuo Wu, Gequan Mo, Haibo Chen</em></p><p><strong>TL;DR</strong> — A microkernel-based whole-system persistence scheme uses tree-structured incremental checkpointing to achieve low-overhead, crash-consistent snapshots of the entire OS state.</p><p><strong>Why notable</strong> — Whole-system persistence is a foundational building block for reliable systems; this paper shows it can be done efficiently within a microkernel architecture.</p><hr><h3 id=xputee-a-high-performance-and-practical-heterogeneous-trusted-execution-environment-for-gpus>XpuTEE: A High-Performance and Practical Heterogeneous Trusted Execution Environment for GPUs<a hidden class=anchor aria-hidden=true href=#xputee-a-high-performance-and-practical-heterogeneous-trusted-execution-environment-for-gpus>#</a></h3><p><em>Shulin Fan, Zhichao Hua, Yubin Xia, Haibo Chen</em></p><p><strong>TL;DR</strong> — XpuTEE extends trusted execution environments to GPUs by designing a hardware-assisted isolation mechanism that protects GPU computations with low performance overhead.</p><p><strong>Why notable</strong> — As GPUs process sensitive ML workloads in shared clouds, TEE support for accelerators is urgently needed; XpuTEE is a comprehensive and practical solution.</p><hr><h3 id=regvault-ii-achieving-hardware-assisted-selective-kernel-data-randomization-for-multiple-architectures>RegVault II: Achieving Hardware-Assisted Selective Kernel Data Randomization for Multiple Architectures<a hidden class=anchor aria-hidden=true href=#regvault-ii-achieving-hardware-assisted-selective-kernel-data-randomization-for-multiple-architectures>#</a></h3><p><em>Ruorong Guo, Yangye Zhou, Jinyan Xu, Wenbo Shen <em>et al.</em></em></p><p><strong>TL;DR</strong> — RegVault II uses hardware features to selectively randomize sensitive kernel data structures at runtime across multiple ISAs, raising the bar for kernel exploitation.</p><p><strong>Why notable</strong> — Kernel data-only attacks bypass existing code-randomization defenses; this work’s multi-architecture approach makes selective data randomization practical for production kernels.</p><hr><h3 id=validating-jit-compilers-via-compilation-space-exploration>Validating JIT Compilers via Compilation Space Exploration<a hidden class=anchor aria-hidden=true href=#validating-jit-compilers-via-compilation-space-exploration>#</a></h3><p><em>Cong Li, Yanyan Jiang, Chang Xu, Zhendong Su</em></p><p><strong>TL;DR</strong> — Compilation space exploration systematically generates and tests the large space of valid JIT compilation outcomes to find miscompilation bugs in production JIT compilers.</p><p><strong>Why notable</strong> — JIT correctness is notoriously hard to test; this paper’s systematic exploration strategy finds real bugs in widely-used runtimes and advances the state of compiler validation.</p><hr><h3 id=freezing-based-memory-and-process-co-design-for-user-experience-on-resource-limited-mobile-devices>Freezing-based Memory and Process Co-design for User Experience on Resource-limited Mobile Devices<a hidden class=anchor aria-hidden=true href=#freezing-based-memory-and-process-co-design-for-user-experience-on-resource-limited-mobile-devices>#</a></h3><p><em>Changlong Li, Zongwei Zhu, Chun Jason Xue, Yu Liang <em>et al.</em></em></p><p><strong>TL;DR</strong> — A co-designed memory and process management scheme freezes background processes at fine granularity to reclaim memory while preserving fast resume latency on constrained mobile hardware.</p><p><strong>Why notable</strong> — Mobile memory pressure directly degrades user experience; this paper’s co-design perspective yields measurable improvements on real devices with limited resources.</p><hr><h3 id=analyzing-configuration-dependencies-of-file-systems>Analyzing Configuration Dependencies of File Systems<a hidden class=anchor aria-hidden=true href=#analyzing-configuration-dependencies-of-file-systems>#</a></h3><p><em>Tabassum Mahmud, Om Rameshwar Gatla, Duo Zhang, Carson Love <em>et al.</em></em></p><p><strong>TL;DR</strong> — This work systematically analyzes the dependency graph among file-system configuration options to reveal hidden interactions that lead to silent data corruption or crashes.</p><p><strong>Why notable</strong> — File-system misconfiguration is a major source of data loss in practice; understanding configuration dependencies is essential for building safer storage systems.</p><hr><h3 id=efficient-fault-tolerance-for-stateful-serverless-computing-with-asymmetric-logging>Efficient Fault Tolerance for Stateful Serverless Computing with Asymmetric Logging<a hidden class=anchor aria-hidden=true href=#efficient-fault-tolerance-for-stateful-serverless-computing-with-asymmetric-logging>#</a></h3><p><em>Sheng Qi, Haoyu Feng, Xuanzhe Liu, Xin Jin</em></p><p><strong>TL;DR</strong> — Asymmetric logging decouples the logging cost between the fast and slow paths of stateful serverless functions, enabling low-overhead fault tolerance without sacrificing recovery guarantees.</p><p><strong>Why notable</strong> — Fault tolerance for stateful serverless remains an open performance challenge; this paper’s asymmetric design significantly reduces logging overhead compared to symmetric approaches.</p><hr><h3 id=towards-serializationdeserialization-free-state-transfer-in-serverless-workflows>Towards Serialization/Deserialization-free State Transfer in Serverless Workflows<a hidden class=anchor aria-hidden=true href=#towards-serializationdeserialization-free-state-transfer-in-serverless-workflows>#</a></h3><p><em>Xingda Wei, Fangming Lu, Zhuobin Huang, Rong Chen <em>et al.</em></em></p><p><strong>TL;DR</strong> — This system eliminates serialization and deserialization costs when passing state between serverless functions by enabling direct in-memory state transfer across workflow stages.</p><p><strong>Why notable</strong> — Ser/deser overhead is a dominant cost in serverless workflows; removing it fundamentally changes the performance profile of function chaining at scale.</p><hr><h3 id=enabling-anonymous-online-streaming-analytics-at-the-network-edge>Enabling Anonymous Online Streaming Analytics at the Network Edge<a hidden class=anchor aria-hidden=true href=#enabling-anonymous-online-streaming-analytics-at-the-network-edge>#</a></h3><p><em>Yunming Xiao, Yanqi Gu, Yibo Zhao, Sen Lin <em>et al.</em></em></p><p><strong>TL;DR</strong> — This paper designs an edge-based streaming analytics framework that enforces differential privacy while processing high-throughput data streams with low latency.</p><p><strong>Why notable</strong> — Privacy-preserving analytics at the edge is increasingly required by regulation and user expectation; this system shows it can be done at practical streaming throughputs.</p><hr><h3 id=lcl-a-lock-chain-length-based-distributed-deadlock-detection-and-resolution-service-built-for-oceanbase>LCL+: a Lock Chain Length-based Distributed Deadlock Detection and Resolution Service Built for OceanBase<a hidden class=anchor aria-hidden=true href=#lcl-a-lock-chain-length-based-distributed-deadlock-detection-and-resolution-service-built-for-oceanbase>#</a></h3><p><em>Zhenkun Yang, Chen Qian, Xuwang Teng, Fanyu Kong <em>et al.</em></em></p><p><strong>TL;DR</strong> — LCL+ detects and resolves distributed deadlocks in the OceanBase database by tracking lock-chain lengths across nodes, achieving low overhead with fast detection latency.</p><p><strong>Why notable</strong> — Deadlock detection in large-scale distributed databases is an unsolved production problem; this paper presents a battle-tested algorithm deployed in a major commercial system.</p></div><footer class=post-footer><ul class=post-tags></ul><nav class=paginav><a class=prev href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/tcc-2025/><span class=title>« Prev</span>
|
||
<span>TCC 2025 Digest</span>
|
||
</a><a class=next href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/tpds-2025/><span class=title>Next »</span>
|
||
<span>TPDS 2025 Digest</span></a></nav></footer></article></main><footer class=footer><span>© 2026 <a href=https://pub.sqrt.fr/vincent/publish-assistant/>Publish Assistant</a></span> ·
|
||
<span>Powered by
|
||
<a href="https://gohugo.io/?utm_source=papermod" rel=noopener target=_blank>Hugo</a> &
|
||
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top id=top-link class="top-link hidden" aria-label="go to top" title="Go to Top (Alt + G)" accesskey=g><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevrons-up"><polyline points="17 11 12 6 7 11"/><polyline points="17 18 12 13 7 18"/></svg>
|
||
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var toplink=document.getElementById("top-link");window.onscroll=function(){const e=window.innerHeight;document.body.scrollTop>e||document.documentElement.scrollTop>e?toplink.classList.remove("hidden"):toplink.classList.add("hidden")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html> |