Repository navigation
Expand file tree
/
Copy pathindex.html
More file actions
168 lines (153 loc) · 32.8 KB
/
Copy pathindex.html
File metadata and controls
168 lines (153 loc) · 32.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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
156
157
158
159
160
161
162
163
164
165
166
167
168
<!DOCTYPE html><html lang="zh-CN" data-theme="light"> <head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta name="description" content="XYBio 的个人博客,记录生物信息、AI、科研工具、日常学习与求职作品。"><title>XYBio.info</title><link rel="preconnect" href="https://fontsapi.zeoseven.com" crossorigin><script>
(() => {
const key = 'xybio-fonts-ready';
if (!sessionStorage.getItem(key)) {
document.documentElement.classList.add('fonts-loading');
}
document.fonts?.ready.then(() => {
sessionStorage.setItem(key, '1');
document.documentElement.classList.remove('fonts-loading');
});
})();
</script><link rel="icon" type="image/png" sizes="96x96" href="/icons/favicon-96x96.png"><link rel="shortcut icon" type="image/png" href="/favicon.ico"><link rel="apple-touch-icon" sizes="180x180" href="/icons/apple-touch-icon.png"><link rel="canonical" href="https://xybio.info/"><meta property="og:title" content="XYBio.info"><meta property="og:description" content="XYBio 的个人博客,记录生物信息、AI、科研工具、日常学习与求职作品。"><meta property="og:type" content="website"><meta property="og:url" content="https://xybio.info/"><meta name="astro-view-transitions-enabled" content="true"><meta name="astro-view-transitions-fallback" content="animate"><script type="module" src="/_astro/ClientRouter.astro_astro_type_script_index_0_lang.j56hQv-j.js"></script><link rel="stylesheet" href="/_astro/BaseLayout.DkiZAV7l.css"><style>[data-astro-transition-scope="astro-vepkwmqc-1"] { view-transition-name: page-content; }@layer astro { ::view-transition-old(page-content) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }::view-transition-new(page-content) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; }[data-astro-transition=back]::view-transition-old(page-content) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }[data-astro-transition=back]::view-transition-new(page-content) {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; } }[data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-vepkwmqc-1"],
[data-astro-transition-fallback="old"][data-astro-transition-scope="astro-vepkwmqc-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }[data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-vepkwmqc-1"],
[data-astro-transition-fallback="new"][data-astro-transition-scope="astro-vepkwmqc-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; }[data-astro-transition=back][data-astro-transition-fallback="old"] [data-astro-transition-scope="astro-vepkwmqc-1"],
[data-astro-transition=back][data-astro-transition-fallback="old"][data-astro-transition-scope="astro-vepkwmqc-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeOut; }[data-astro-transition=back][data-astro-transition-fallback="new"] [data-astro-transition-scope="astro-vepkwmqc-1"],
[data-astro-transition=back][data-astro-transition-fallback="new"][data-astro-transition-scope="astro-vepkwmqc-1"] {
animation-duration: 180ms;
animation-timing-function: cubic-bezier(0.76, 0, 0.24, 1);
animation-fill-mode: both;
animation-name: astroFadeIn; }</style></head> <body> <a class="skip-link" href="#content">跳到正文</a> <header class="site-header"> <nav class="shell nav" aria-label="主导航"> <div class="nav-main"> <a class="brand" href="/" aria-label="XYBIO.INFO 首页"> <img class="brand-mark" src="/logo-1.png" alt=""> <span>XYBIO.INFO</span> </a> </div> <div class="nav-links"> <a href="/" aria-current="page"> 首页 </a><a href="/notes/"> 笔记 </a><a href="/research/"> 科研 </a><a href="/practice/"> 实践 </a><a href="/opensource/"> 开源 </a><a href="/about/"> 关于 </a> </div> </nav> </header> <main id="content" data-astro-transition-scope="astro-vepkwmqc-1"> <section class="hero"> <div class="shell hero-grid"> <div> <p class="eyebrow">XYBio · Bioinformatics · Learning Notes</p> <h1 class="hero-title hero-gradient-text">XYBioinfo</h1> <div class="slogan" aria-label="思想、新知、价值、乐趣"> <div> <strong>思想</strong> <span>Ideas</span> </div> <div> <strong>新知</strong> <span>Discovery</span> </div> <div> <strong>价值</strong> <span>Value</span> </div> <div> <strong>乐趣</strong> <span>Delight</span> </div> </div> <div class="actions"> <a class="button hero-cta" href="/notes/"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5v-15A2.5 2.5 0 016.5 2H20v20H6.5a2.5 2.5 0 010-5H20"></path></svg> <span>阅读文章</span> <kbd>N</kbd> </a> <a class="button secondary hero-cta-secondary" href="/about/"> <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg> <span>查看简介</span> </a> </div> </div> <aside class="profile-panel terminal-profile" aria-label="Albert Hsi profile terminal"> <div class="terminal-bar" aria-hidden="true"> <div class="terminal-dots"> <span></span> <span></span> <span></span> </div> <span class="terminal-title">XYBIO</span> <span class="terminal-state">ONLINE</span> </div> <div class="terminal-screen" data-terminal-profile aria-label="Albert Hsi, PhD Medical AI, Hematology, Virtual Cell, Bio and Medical Data to Applied AI Systems"> <p data-terminal-row><span class="terminal-prompt">xybio@chiromic:~$</span> <span data-terminal-line="init_profile --id albert-hsi"></span></p> <p data-terminal-row><span class="terminal-muted" data-terminal-line="loading identity..."></span></p> <!-- data-terminal-mode="instant" 表示这一行不逐字打字,而是在等待后整行出现 --> <p data-terminal-row data-terminal-mode="instant"><span class="terminal-key">name</span><span data-terminal-line="Albert Hsi"></span></p> <p data-terminal-row data-terminal-mode="instant"><span class="terminal-key">role</span><span data-terminal-line="PhD · Medical AI"></span></p> <p data-terminal-row data-terminal-mode="instant"><span class="terminal-key">domain</span><span data-terminal-line="Hematology · Virtual Cell"></span></p> <p data-terminal-row data-terminal-mode="instant"><span class="terminal-key">mission</span><span data-terminal-line="Bio&Medical Data to Applied AI Systems."></span></p> </div> </aside> </div> </section> <script>
(() => {
let terminalTimers = [];
const clearTerminalTimers = () => {
terminalTimers.forEach((timer) => window.clearTimeout(timer));
terminalTimers = [];
};
const scheduleTerminal = (callback, delay) => {
const timer = window.setTimeout(callback, delay);
terminalTimers.push(timer);
return timer;
};
// 终端动画参数集中在这里调:数值单位都是 ms,越小越快。
const terminalTiming = {
initialDelay: 300, // 每轮动画开始前的等待时间。
rowStartDelay: 900, // 某一行显示后,开始输出前的短暂停顿。
minCharDelay: 10, // 逐字打字的基础字符间隔。
randomCharDelay: 60, // 逐字打字的随机额外间隔,用来避免机械匀速感。
instantRowDelay: 300, // instant 行整行出现前的等待时间。
rowPause: 600, // 一行输出完成后,到下一行开始前的停顿。
restartPause: 5000 // 全部输出完成后,等待多久重新循环播放。
};
const initTerminalProfile = () => {
const terminal = document.querySelector('[data-terminal-profile]');
if (!terminal) return;
clearTerminalTimers();
const rows = Array.from(terminal.querySelectorAll('[data-terminal-row]'));
terminal.removeAttribute('data-terminal-complete');
rows.forEach((row) => {
const line = row.querySelector('[data-terminal-line]');
row.removeAttribute('data-visible');
row.removeAttribute('data-active');
if (line) line.textContent = '';
});
const typeRow = (row, done) => {
const line = row.querySelector('[data-terminal-line]');
const text = line?.getAttribute('data-terminal-line') || '';
const mode = row.getAttribute('data-terminal-mode') || 'type';
let index = 0;
// instant 模式用于 NAME 之后的内容:保留终端节奏,但整行直接出现。
if (mode === 'instant') {
scheduleTerminal(() => {
row.setAttribute('data-visible', 'true');
row.setAttribute('data-active', 'true');
if (line) line.textContent = text;
scheduleTerminal(() => {
row.removeAttribute('data-active');
done();
}, terminalTiming.rowPause);
}, terminalTiming.instantRowDelay);
return;
}
row.setAttribute('data-visible', 'true');
row.setAttribute('data-active', 'true');
const tick = () => {
if (line) line.textContent = text.slice(0, index);
index += 1;
if (index <= text.length) {
scheduleTerminal(tick, terminalTiming.minCharDelay + Math.random() * terminalTiming.randomCharDelay);
} else {
row.removeAttribute('data-active');
scheduleTerminal(done, terminalTiming.rowPause);
}
};
scheduleTerminal(tick, terminalTiming.rowStartDelay);
};
const run = (index = 0) => {
if (index >= rows.length) {
terminal.setAttribute('data-terminal-complete', 'true');
rows.at(-1)?.setAttribute('data-active', 'true');
scheduleTerminal(initTerminalProfile, terminalTiming.restartPause);
return;
}
typeRow(rows[index], () => run(index + 1));
};
scheduleTerminal(() => run(), terminalTiming.initialDelay);
};
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', initTerminalProfile, { once: true });
} else {
initTerminalProfile();
}
window.__xybioTerminalProfile = initTerminalProfile;
document.addEventListener('astro:page-load', initTerminalProfile);
document.addEventListener('astro:after-swap', initTerminalProfile);
document.addEventListener('visibilitychange', () => {
if (!document.hidden) initTerminalProfile();
});
})();
</script> <section class="section reveal"> <div class="shell"> <div class="section-title"> <div class="resume-section-head" style="margin-bottom: 0;"> <p class="eyebrow">Digital Footprints</p> <h2>数字足迹</h2> </div> </div> <div class="metric-ticker" aria-label="个人量化指标"> <div class="metric-lane metric-lane-a" style="--metric-lane-animation: ticker-scroll-left; --metric-lane-duration: 16s;"> <div class="metric-track"> <a class="metric-chip" href="/about/" aria-label="软件著作权 3项"> <span class="metric-chip-label">软件著作权</span> <strong> 3 <small>项</small> </strong> <em>已授权</em> </a><a class="metric-chip" href="/about/" aria-label="SCI 论文 7篇"> <span class="metric-chip-label">SCI 论文</span> <strong> 7 <small>篇</small> </strong> <em>简历统计</em> </a><a class="metric-chip" href="/about/" aria-label="PNAS 论文 2篇"> <span class="metric-chip-label">PNAS 论文</span> <strong> 2 <small>篇</small> </strong> <em>共同作者</em> </a><a class="metric-chip" href="/practice/bioos-ai-open-source-competition/" aria-label="Bio-OS 大赛 1等奖"> <span class="metric-chip-label">Bio-OS 大赛</span> <strong> 1 <small>等奖</small> </strong> <em>Lu.Lab 团队队长</em> </a><a class="metric-chip" href="/about/" aria-label="软件著作权 3项"> <span class="metric-chip-label">软件著作权</span> <strong> 3 <small>项</small> </strong> <em>已授权</em> </a><a class="metric-chip" href="/about/" aria-label="SCI 论文 7篇"> <span class="metric-chip-label">SCI 论文</span> <strong> 7 <small>篇</small> </strong> <em>简历统计</em> </a><a class="metric-chip" href="/about/" aria-label="PNAS 论文 2篇"> <span class="metric-chip-label">PNAS 论文</span> <strong> 2 <small>篇</small> </strong> <em>共同作者</em> </a><a class="metric-chip" href="/practice/bioos-ai-open-source-competition/" aria-label="Bio-OS 大赛 1等奖"> <span class="metric-chip-label">Bio-OS 大赛</span> <strong> 1 <small>等奖</small> </strong> <em>Lu.Lab 团队队长</em> </a><a class="metric-chip" href="/about/" aria-label="软件著作权 3项"> <span class="metric-chip-label">软件著作权</span> <strong> 3 <small>项</small> </strong> <em>已授权</em> </a><a class="metric-chip" href="/about/" aria-label="SCI 论文 7篇"> <span class="metric-chip-label">SCI 论文</span> <strong> 7 <small>篇</small> </strong> <em>简历统计</em> </a><a class="metric-chip" href="/about/" aria-label="PNAS 论文 2篇"> <span class="metric-chip-label">PNAS 论文</span> <strong> 2 <small>篇</small> </strong> <em>共同作者</em> </a><a class="metric-chip" href="/practice/bioos-ai-open-source-competition/" aria-label="Bio-OS 大赛 1等奖"> <span class="metric-chip-label">Bio-OS 大赛</span> <strong> 1 <small>等奖</small> </strong> <em>Lu.Lab 团队队长</em> </a><a class="metric-chip" href="/about/" aria-label="软件著作权 3项"> <span class="metric-chip-label">软件著作权</span> <strong> 3 <small>项</small> </strong> <em>已授权</em> </a><a class="metric-chip" href="/about/" aria-label="SCI 论文 7篇"> <span class="metric-chip-label">SCI 论文</span> <strong> 7 <small>篇</small> </strong> <em>简历统计</em> </a><a class="metric-chip" href="/about/" aria-label="PNAS 论文 2篇"> <span class="metric-chip-label">PNAS 论文</span> <strong> 2 <small>篇</small> </strong> <em>共同作者</em> </a><a class="metric-chip" href="/practice/bioos-ai-open-source-competition/" aria-label="Bio-OS 大赛 1等奖"> <span class="metric-chip-label">Bio-OS 大赛</span> <strong> 1 <small>等奖</small> </strong> <em>Lu.Lab 团队队长</em> </a><a class="metric-chip" href="/about/" aria-label="软件著作权 3项"> <span class="metric-chip-label">软件著作权</span> <strong> 3 <small>项</small> </strong> <em>已授权</em> </a><a class="metric-chip" href="/about/" aria-label="SCI 论文 7篇"> <span class="metric-chip-label">SCI 论文</span> <strong> 7 <small>篇</small> </strong> <em>简历统计</em> </a><a class="metric-chip" href="/about/" aria-label="PNAS 论文 2篇"> <span class="metric-chip-label">PNAS 论文</span> <strong> 2 <small>篇</small> </strong> <em>共同作者</em> </a><a class="metric-chip" href="/practice/bioos-ai-open-source-competition/" aria-label="Bio-OS 大赛 1等奖"> <span class="metric-chip-label">Bio-OS 大赛</span> <strong> 1 <small>等奖</small> </strong> <em>Lu.Lab 团队队长</em> </a> </div> </div> <div class="metric-lane metric-lane-b" style="--metric-lane-animation: ticker-scroll-right; --metric-lane-duration: 20s;"> <div class="metric-track"> <a class="metric-chip" href="/research/" aria-label="研究项目 6项"> <span class="metric-chip-label">研究项目</span> <strong> 6 <small>项</small> </strong> <em>科研成果与课题沉淀</em> </a><a class="metric-chip" href="/practice/" aria-label="实践案例 2条"> <span class="metric-chip-label">实践案例</span> <strong> 2 <small>条</small> </strong> <em>竞赛与社会实践记录</em> </a><a class="metric-chip" href="/opensource/" aria-label="代码仓库 1个"> <span class="metric-chip-label">代码仓库</span> <strong> 1 <small>个</small> </strong> <em>公开项目与工具沉淀</em> </a><a class="metric-chip" href="/notes/" aria-label="内容沉淀 13篇"> <span class="metric-chip-label">内容沉淀</span> <strong> 13 <small>篇</small> </strong> <em>科研笔记与方法记录</em> </a><a class="metric-chip" href="/notes/" aria-label="AI 工作流 50+M tokens"> <span class="metric-chip-label">AI 工作流</span> <strong> 50+ <small>M tokens</small> </strong> <em>本周科研开发投入(估算)</em> </a><a class="metric-chip" href="/research/" aria-label="研究项目 6项"> <span class="metric-chip-label">研究项目</span> <strong> 6 <small>项</small> </strong> <em>科研成果与课题沉淀</em> </a><a class="metric-chip" href="/practice/" aria-label="实践案例 2条"> <span class="metric-chip-label">实践案例</span> <strong> 2 <small>条</small> </strong> <em>竞赛与社会实践记录</em> </a><a class="metric-chip" href="/opensource/" aria-label="代码仓库 1个"> <span class="metric-chip-label">代码仓库</span> <strong> 1 <small>个</small> </strong> <em>公开项目与工具沉淀</em> </a><a class="metric-chip" href="/notes/" aria-label="内容沉淀 13篇"> <span class="metric-chip-label">内容沉淀</span> <strong> 13 <small>篇</small> </strong> <em>科研笔记与方法记录</em> </a><a class="metric-chip" href="/notes/" aria-label="AI 工作流 50+M tokens"> <span class="metric-chip-label">AI 工作流</span> <strong> 50+ <small>M tokens</small> </strong> <em>本周科研开发投入(估算)</em> </a><a class="metric-chip" href="/research/" aria-label="研究项目 6项"> <span class="metric-chip-label">研究项目</span> <strong> 6 <small>项</small> </strong> <em>科研成果与课题沉淀</em> </a><a class="metric-chip" href="/practice/" aria-label="实践案例 2条"> <span class="metric-chip-label">实践案例</span> <strong> 2 <small>条</small> </strong> <em>竞赛与社会实践记录</em> </a><a class="metric-chip" href="/opensource/" aria-label="代码仓库 1个"> <span class="metric-chip-label">代码仓库</span> <strong> 1 <small>个</small> </strong> <em>公开项目与工具沉淀</em> </a><a class="metric-chip" href="/notes/" aria-label="内容沉淀 13篇"> <span class="metric-chip-label">内容沉淀</span> <strong> 13 <small>篇</small> </strong> <em>科研笔记与方法记录</em> </a><a class="metric-chip" href="/notes/" aria-label="AI 工作流 50+M tokens"> <span class="metric-chip-label">AI 工作流</span> <strong> 50+ <small>M tokens</small> </strong> <em>本周科研开发投入(估算)</em> </a><a class="metric-chip" href="/research/" aria-label="研究项目 6项"> <span class="metric-chip-label">研究项目</span> <strong> 6 <small>项</small> </strong> <em>科研成果与课题沉淀</em> </a><a class="metric-chip" href="/practice/" aria-label="实践案例 2条"> <span class="metric-chip-label">实践案例</span> <strong> 2 <small>条</small> </strong> <em>竞赛与社会实践记录</em> </a><a class="metric-chip" href="/opensource/" aria-label="代码仓库 1个"> <span class="metric-chip-label">代码仓库</span> <strong> 1 <small>个</small> </strong> <em>公开项目与工具沉淀</em> </a><a class="metric-chip" href="/notes/" aria-label="内容沉淀 13篇"> <span class="metric-chip-label">内容沉淀</span> <strong> 13 <small>篇</small> </strong> <em>科研笔记与方法记录</em> </a><a class="metric-chip" href="/notes/" aria-label="AI 工作流 50+M tokens"> <span class="metric-chip-label">AI 工作流</span> <strong> 50+ <small>M tokens</small> </strong> <em>本周科研开发投入(估算)</em> </a><a class="metric-chip" href="/research/" aria-label="研究项目 6项"> <span class="metric-chip-label">研究项目</span> <strong> 6 <small>项</small> </strong> <em>科研成果与课题沉淀</em> </a><a class="metric-chip" href="/practice/" aria-label="实践案例 2条"> <span class="metric-chip-label">实践案例</span> <strong> 2 <small>条</small> </strong> <em>竞赛与社会实践记录</em> </a><a class="metric-chip" href="/opensource/" aria-label="代码仓库 1个"> <span class="metric-chip-label">代码仓库</span> <strong> 1 <small>个</small> </strong> <em>公开项目与工具沉淀</em> </a><a class="metric-chip" href="/notes/" aria-label="内容沉淀 13篇"> <span class="metric-chip-label">内容沉淀</span> <strong> 13 <small>篇</small> </strong> <em>科研笔记与方法记录</em> </a><a class="metric-chip" href="/notes/" aria-label="AI 工作流 50+M tokens"> <span class="metric-chip-label">AI 工作流</span> <strong> 50+ <small>M tokens</small> </strong> <em>本周科研开发投入(估算)</em> </a> </div> </div> </div> </div> </section> <section class="section reveal"> <div class="shell"> <div class="section-title"> <div class="resume-section-head" style="margin-bottom: 0;"> <p class="eyebrow">Latest Notes</p> <h2>最新笔记</h2> </div> <a class="pill-link" href="/notes/">全部笔记</a> </div> <div class="post-grid"> <article class="card" data-card-link="/notes/shellcrash-rare-port-transparent-proxy/" tabindex="0" role="link" aria-label="阅读文章:ShellCrash 的非常用端口过滤:一次远程 RStudio 访问故障排查"> <div class="card-image card-image-placeholder" aria-hidden="true"></div> <div class="card-body"> <div class="taxonomy-card-head note-card-head"> <a class="kind-badge" href="/notes/?topic=%E7%A7%91%E7%A0%94%E7%8E%AF%E5%A2%83%E9%83%A8%E7%BD%B2" data-card-filter-topic="科研环境部署"> 科研环境部署 </a> <span class="status-badge">2026 / 09 / 09</span> </div> <h3><a href="/notes/shellcrash-rare-port-transparent-proxy/">ShellCrash 的非常用端口过滤:一次远程 RStudio 访问故障排查</a></h3> <p>当 10.20.30.0/24 的 IP 规则已经加载,RStudio Server 仍无法访问时,真正的问题可能在端口过滤,而不是订阅规则。</p> <div class="tag-row"> <a class="tag" href="/notes/?tag=ShellCrash" data-card-filter-tag="ShellCrash">ShellCrash</a><a class="tag" href="/notes/?tag=%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE" data-card-filter-tag="网络配置">网络配置</a> </div> </div> </article><article class="card" data-card-link="/notes/ai-for-medicine-platform/" tabindex="0" role="link" aria-label="阅读文章:个人博客建设路线图"> <div class="card-image card-image-placeholder" aria-hidden="true"></div> <div class="card-body"> <div class="taxonomy-card-head note-card-head"> <a class="kind-badge" href="/notes/?topic=%E7%AB%99%E7%82%B9%E5%BB%BA%E8%AE%BE" data-card-filter-topic="站点建设"> 站点建设 </a> <span class="status-badge">2026 / 04 / 13</span> </div> <h3><a href="/notes/ai-for-medicine-platform/">个人博客建设路线图</a></h3> <p>把学习记录、项目作品和求职材料沉淀成一个长期更新的公开主页。</p> <div class="tag-row"> <a class="tag" href="/notes/?tag=%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2" data-card-filter-tag="个人博客">个人博客</a><a class="tag" href="/notes/?tag=%E6%B1%82%E8%81%8C" data-card-filter-tag="求职">求职</a><a class="tag" href="/notes/?tag=%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF" data-card-filter-tag="生物信息">生物信息</a> </div> </div> </article><article class="card" data-card-link="/notes/ai-literature-reading-workflow/" tabindex="0" role="link" aria-label="阅读文章:AI 辅助文献阅读工作流"> <div class="card-image card-image-placeholder" aria-hidden="true"></div> <div class="card-body"> <div class="taxonomy-card-head note-card-head"> <a class="kind-badge" href="/notes/?topic=%E7%A7%91%E7%A0%94%E7%AC%94%E8%AE%B0" data-card-filter-topic="科研笔记"> 科研笔记 </a> <span class="status-badge">2026 / 04 / 10</span> </div> <h3><a href="/notes/ai-literature-reading-workflow/">AI 辅助文献阅读工作流</a></h3> <p>把论文筛选、速读、笔记归档和问题追踪串成一条可复用流程。</p> <div class="tag-row"> <a class="tag" href="/notes/?tag=AI" data-card-filter-tag="AI">AI</a><a class="tag" href="/notes/?tag=%E6%96%87%E7%8C%AE%E9%98%85%E8%AF%BB" data-card-filter-tag="文献阅读">文献阅读</a><a class="tag" href="/notes/?tag=%E8%87%AA%E5%8A%A8%E5%8C%96%E5%B7%A5%E4%BD%9C%E6%B5%81" data-card-filter-tag="自动化工作流">自动化工作流</a> </div> </div> </article><article class="card" data-card-link="/notes/siyuan-api-skill-design/" tabindex="0" role="link" aria-label="阅读文章:如何设计一个安全的 SiYuan API Agent Skill"> <div class="card-image card-image-placeholder" aria-hidden="true"></div> <div class="card-body"> <div class="taxonomy-card-head note-card-head"> <a class="kind-badge" href="/notes/?topic=%E7%A7%91%E7%A0%94%E7%AC%94%E8%AE%B0" data-card-filter-topic="科研笔记"> 科研笔记 </a> <span class="status-badge">2026 / 03 / 22</span> </div> <h3><a href="/notes/siyuan-api-skill-design/">如何设计一个安全的 SiYuan API Agent Skill</a></h3> <p>复盘 siyuan-api skill 的设计:为什么坚持本地端点、接口白名单、受限 SQL,以及安全边界仍然遗漏了什么。</p> <div class="tag-row"> <a class="tag" href="/notes/?tag=Agent%20Skill" data-card-filter-tag="Agent Skill">Agent Skill</a><a class="tag" href="/notes/?tag=SiYuan" data-card-filter-tag="SiYuan">SiYuan</a><a class="tag" href="/notes/?tag=%E5%AE%89%E5%85%A8%E8%AE%BE%E8%AE%A1" data-card-filter-tag="安全设计">安全设计</a> <span class="tag tag-muted">+1</span> </div> </div> </article> </div> </div> </section> <section class="section reveal"> <div class="shell"> <div class="section-title"> <div class="resume-section-head" style="margin-bottom: 0;"> <p class="eyebrow">Trending Topics</p> <h2>热点专题</h2> </div> <a class="pill-link" href="/notes/">全部专题</a> </div> <div class="topic-rail" role="list"> <a class="topic-rail-item" href="/notes/?topic=科研笔记" role="listitem"> <div class="topic-rail-main"> <h3>科研笔记</h3> <p>面向科研任务的拆解、推理和方法复盘。</p> </div> <div class="topic-rail-side"> <span class="topic-rail-en">Research Notes</span> <strong>10</strong> <small>关联内容</small> </div> </a><a class="topic-rail-item" href="/notes/?topic=站点建设" role="listitem"> <div class="topic-rail-main"> <h3>站点建设</h3> <p>博客结构、内容组织和系统化建设过程。</p> </div> <div class="topic-rail-side"> <span class="topic-rail-en">Site Building</span> <strong>2</strong> <small>关联内容</small> </div> </a><a class="topic-rail-item" href="/notes/?topic=模板" role="listitem"> <div class="topic-rail-main"> <h3>模板</h3> <p>写作、排版、公式与复用模板沉淀。</p> </div> <div class="topic-rail-side"> <span class="topic-rail-en">Templates</span> <strong>2</strong> <small>关联内容</small> </div> </a><a class="topic-rail-item" href="/notes/" role="listitem"> <div class="topic-rail-main"> <h3>全部专题</h3> <p>查看全量专题索引,按主题连续阅读。</p> </div> <div class="topic-rail-side"> <span class="topic-rail-en">All Topics</span> <strong>12</strong> <small>关联内容</small> </div> </a> </div> </div> </section> <section class="section reveal"> <div class="shell"> <div class="section-title"> <div class="resume-section-head" style="margin-bottom: 0;"> <p class="eyebrow">Signature Work</p> <h2>代表成果</h2> </div> <a class="pill-link" href="/research/">进入科研</a> </div> <div class="signature-grid"> <a class="card signature-card signature-row" href="/about/"> <div class="signature-index-col" aria-hidden="true"> <span class="signature-kind">论文</span> <span class="signature-index">01</span> </div> <div class="card-body signature-main"> <h3>ORCID 收录论文</h3> <p>医学信息学、生物信息学与医疗 AI 方向的阶段性研究成果。</p> </div> <aside class="signature-metrics" aria-label="ORCID 收录论文 指标"> <div class="signature-metric"> <span>SCI 论文</span> <strong>7 篇</strong> </div><div class="signature-metric"> <span>PNAS</span> <strong>2 篇</strong> </div><div class="signature-metric"> <span>最近发表</span> <strong>2026</strong> </div> </aside> </a><a class="card signature-card signature-row" href="/about/"> <div class="signature-index-col" aria-hidden="true"> <span class="signature-kind">软著</span> <span class="signature-index">02</span> </div> <div class="card-body signature-main"> <h3>计算机软件著作权</h3> <p>分析方法工具化与生信流程产品化。</p> </div> <aside class="signature-metrics" aria-label="计算机软件著作权 指标"> <div class="signature-metric"> <span>数量</span> <strong>3 项</strong> </div><div class="signature-metric"> <span>类别</span> <strong>生信软件</strong> </div><div class="signature-metric"> <span>状态</span> <strong>已授权</strong> </div> </aside> </a><a class="card signature-card signature-row" href="/practice/bioos-ai-open-source-competition/"> <div class="signature-index-col" aria-hidden="true"> <span class="signature-kind">赛事</span> <span class="signature-index">03</span> </div> <div class="card-body signature-main"> <h3>第三届Bio-OS AI开源大赛</h3> <p>广州国家实验室主办,开源算法竞赛。</p> </div> <aside class="signature-metrics" aria-label="第三届Bio-OS AI开源大赛 指标"> <div class="signature-metric"> <span>奖项</span> <strong>一等奖</strong> </div><div class="signature-metric"> <span>颁发单位</span> <strong>国家实验室</strong> </div><div class="signature-metric"> <span>时间</span> <strong>2025.12</strong> </div> </aside> </a><a class="card signature-card signature-row" href="/opensource/siyuan-api-skill/"> <div class="signature-index-col" aria-hidden="true"> <span class="signature-kind">开源</span> <span class="signature-index">04</span> </div> <div class="card-body signature-main"> <h3>SiYuan API Skill</h3> <p>面向本地思源笔记 API 的受约束 Agent Skill。</p> </div> <aside class="signature-metrics" aria-label="SiYuan API Skill 指标"> <div class="signature-metric"> <span>形态</span> <strong>Agent Skill</strong> </div><div class="signature-metric"> <span>语言</span> <strong>Markdown</strong> </div><div class="signature-metric"> <span>阶段</span> <strong>Release</strong> </div> </aside> </a> </div> </div> </section> </main> <footer class="site-footer"> <div class="shell footer-inner"> <span>© 2026 XYBio</span> <span>科研不止一面 / More Sildes of Science.</span> </div> </footer> <script type="module">document.addEventListener("click",e=>{const t=e.target;if(!(t instanceof Element)||t.closest("a, button, input, label, select, textarea"))return;const n=t.closest("[data-card-link]");if(!(n instanceof HTMLElement))return;const r=n.dataset.cardLink;r&&(window.location.href=r)});document.addEventListener("keydown",e=>{if(e.key!=="Enter"&&e.key!==" ")return;const t=document.activeElement;if(!(t instanceof HTMLElement)||!t.matches("[data-card-link]"))return;e.preventDefault();const n=t.dataset.cardLink;n&&(window.location.href=n)});document.addEventListener("keydown",e=>{e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement||(e.key==="n"||e.key==="N")&&(window.location.href="/notes/")});const a=e=>{const t=document.querySelector("[data-filter-drawer]"),n=document.querySelector("[data-filter-toggle]"),r=document.querySelector(".notes-filter-backdrop");t instanceof HTMLElement&&(t.setAttribute("data-open",e?"true":"false"),r?.setAttribute("data-open",e?"true":"false"),n?.setAttribute("aria-expanded",e?"true":"false"))};document.addEventListener("click",e=>{const t=e.target;if(t instanceof Element){if(t.closest("[data-filter-toggle]")){const r=document.querySelector("[data-filter-drawer]")?.getAttribute("data-open")==="true";a(!r);return}t.closest("[data-filter-close]")&&a(!1)}});document.addEventListener("keydown",e=>{e.key==="Escape"&&a(!1)});document.addEventListener("astro:after-swap",()=>a(!1));</script> <script type="module">document.addEventListener("astro:after-swap",()=>{const t=window.location.pathname;document.querySelectorAll(".nav-links a").forEach(e=>{e.getAttribute("href")===t?e.setAttribute("aria-current","page"):e.removeAttribute("aria-current")})});</script> <script>
const revealObserver = new IntersectionObserver(
(entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
entry.target.classList.add('visible');
revealObserver.unobserve(entry.target);
}
});
},
{ threshold: 0.08, rootMargin: '0px 0px -40px 0px' }
);
document.querySelectorAll('.reveal').forEach((el) => revealObserver.observe(el));
document.addEventListener('astro:after-swap', () => {
document.querySelectorAll('.reveal').forEach((el) => revealObserver.observe(el));
});
</script> </body> </html>