<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pages on CloudLake</title><link>https://cloudlake.eu.org/page/</link><description>Recent content in Pages on CloudLake</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Tue, 20 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://cloudlake.eu.org/page/index.xml" rel="self" type="application/rss+xml"/><item><title>ToME4 天赋查询</title><link>https://cloudlake.eu.org/tome/</link><pubDate>Tue, 20 Oct 2026 00:00:00 +0000</pubDate><guid>https://cloudlake.eu.org/tome/</guid><description>&lt;p&gt;数据直接从 &lt;strong&gt;ToME4 游戏本体&lt;/strong&gt;（&lt;code&gt;tome.team&lt;/code&gt;）里解析出来，不是从维基抄的——所以数字、冷却、消耗都是当前版本的真实值。中文名和描述取自游戏自带的中文语言包。&lt;/p&gt;&#10;&lt;div class="tome" id="tome" data-src="https://cloudlake.eu.org/tome-data.json" data-icons="/media/tome-icons/"&gt;&#13;&#10; &lt;div class="tome-loading"&gt;正在加载天赋数据…&lt;/div&gt;&#13;&#10;&lt;/div&gt;&#13;&#10;&lt;script&gt;&#13;&#10;(function () {&#13;&#10; var root = document.getElementById('tome');&#13;&#10; if (!root) return;&#13;&#10; var ICON_BASE = root.getAttribute('data-icons');&#13;&#10; var D = null;&#13;&#10; var q = '';&#13;&#10; var cat = null;&#13;&#10; var tree = null;&#13;&#10; var klass = null;&#13;&#10; var race = null;&#13;&#10; var PAGE = 60;&#13;&#10; var shown = PAGE;&#13;&#10; var treeSets = {}; // 职业/种族名 -&gt; Set(树 id)&#13;&#10; // 角色参数（影响描述里的数值）&#13;&#10; var STATS = { tl: 5, sp: 50, mp: 50 };&#13;&#10;&#13;&#10; fetch(root.getAttribute('data-src'), { cache: 'no-store' })&#13;&#10; .then(function (r) { return r.ok ? r.json() : Promise.reject(); })&#13;&#10; .then(function (d) {&#13;&#10; D = d;&#13;&#10; (d.classes || []).concat(d.races || []).forEach(function (x) {&#13;&#10; treeSets[x.name] = new Set((x.trees || []).map(function (t) { return t.id; }));&#13;&#10; });&#13;&#10; render();&#13;&#10; })&#13;&#10; .catch(function () {&#13;&#10; root.innerHTML = '&lt;div class="tome-empty"&gt;天赋数据加载失败。&lt;/div&gt;';&#13;&#10; });&#13;&#10;&#13;&#10; function esc(s) {&#13;&#10; return String(s == null ? '' : s).replace(/[&amp;&lt;&gt;"']/g, function (c) {&#13;&#10; return { '&amp;': '&amp;amp;', '&lt;': '&amp;lt;', '&gt;': '&amp;gt;', '"': '&amp;quot;', "'": '&amp;#39;' }[c];&#13;&#10; });&#13;&#10; }&#13;&#10;&#13;&#10; var MODE_ZH = { activated: '主动', passive: '被动', sustained: '持续' };&#13;&#10; var COST_ZH = {&#13;&#10; mana: '法力', stamina: '体力', psi: '灵能', vim: '邪恶',&#13;&#10; positive: '正能量', negative: '负能量', paradox: '悖论',&#13;&#10; equilibrium: '失衡', hate: '仇恨', cost: '消耗'&#13;&#10; };&#13;&#10; var SCALE_ZH = {&#13;&#10; getChance: '触发概率', getPower: '强度', getSpeed: '速度', getImmune: '免疫',&#13;&#10; getResistPenalty: '抗性削减', getMult: '倍率', getResist: '抗性', getResists: '抗性',&#13;&#10; getSlow: '减速', getDuration: '持续回合', getDur: '持续回合', getTurns: '回合数',&#13;&#10; getCrit: '暴击', getCritChance: '暴击率', critpower: '暴击强度', critResist: '暴击抗性',&#13;&#10; getAffinity: '亲和', getSpellpower: '法术强度', getRegen: '回复', getPercent: '百分比',&#13;&#10; getStamina: '体力', getDamage: '伤害', getDamageIncrease: '伤害增幅',&#13;&#10; getArmor: '护甲', getPen: '穿透', getIncrease: '增幅', getReduction: '减伤',&#13;&#10; getSave: '豁免', getBleed: '流血', getShatter: '破甲', getLifePct: '生命百分比',&#13;&#10; getLifeTrigger: '触发阈值', getConversion: '转化率', getImmunities: '免疫',&#13;&#10; getPos: '位置数', getTurnLimit: '回合上限', cooldown: '冷却', radius: '半径'&#13;&#10; };&#13;&#10;&#13;&#10; function scaleLabel(name) {&#13;&#10; if (!name) return '数值';&#13;&#10; if (SCALE_ZH[name]) return SCALE_ZH[name];&#13;&#10; var s = name.replace(/^get/, '').replace(/([A-Z])/g, ' $1').trim();&#13;&#10; return s || name;&#13;&#10; }&#13;&#10;&#13;&#10; // ─────── 数值计算（复刻 ToME 的 Lua 公式）───────&#13;&#10; function cScale(tl, low, high, power, add, shift) {&#13;&#10; if (tl &lt;= 0) tl = 0.1;&#13;&#10; power = (power == null) ? 0.5 : power;&#13;&#10; add = add || 0; shift = shift || 0;&#13;&#10; if (power === 'log') {&#13;&#10; var xl = Math.log10(1 + shift), xh = Math.log10(5 + shift);&#13;&#10; tl = Math.max(1, tl);&#13;&#10; var m = (high - low) / (xh - xl), b = low - m * xl;&#13;&#10; return Math.max(0, m * Math.log10(tl + shift) + b + add);&#13;&#10; }&#13;&#10; var p = Number(power);&#13;&#10; var xl2 = Math.pow(1 + shift, p), xh2 = Math.pow(5 + shift, p);&#13;&#10; var m2 = (high - low) / (xh2 - xl2), b2 = low - m2 * xl2;&#13;&#10; return Math.max(0, m2 * Math.pow(tl + shift, p) + b2 + add);&#13;&#10; }&#13;&#10;&#13;&#10; function cLimit(tl, limit, low, high) {&#13;&#10; if (tl &lt;= 0) tl = 0.5;&#13;&#10; var xl = Math.sqrt(1.3), xh = Math.sqrt(6.5);&#13;&#10; try {&#13;&#10; if (high &gt;= low) {&#13;&#10; if (limit === low || limit === high) return low;&#13;&#10; var a = Math.log((high - limit) / (low - limit)) / (xh - xl);&#13;&#10; var b = -((xh - xl) * Math.log(1 - high / limit)&#13;&#10; - xh * Math.log((high - limit) / (low - limit))) / (xl - xh);&#13;&#10; return limit * (1 - Math.exp(Math.sqrt(tl) * a + b));&#13;&#10; }&#13;&#10; if (limit === low) return low;&#13;&#10; var a2 = Math.log((high - limit) / (low - limit)) / (xh - xl);&#13;&#10; var b2 = -((xh - xl) * Math.log(1 - (low - high) / (low - limit))&#13;&#10; - xh * Math.log((high - limit) / (low - limit))) / (xl - xh);&#13;&#10; return low - (low - limit) * (1 - Math.exp(Math.sqrt(tl) * a2 + b2));&#13;&#10; } catch (e) { return null; }&#13;&#10; }&#13;&#10;&#13;&#10; function cDamage(tl, base, max, power) {&#13;&#10; var mod = max / ((base + 100) * ((Math.sqrt(5) - 1) * 0.8 + 1));&#13;&#10; var raw = (base + power) * ((Math.sqrt(tl) - 1) * 0.8 + 1) * mod;&#13;&#10; return raw &gt; 0 ? Math.pow(raw, 1.04) : raw; // rescaleDamage&#13;&#10; }&#13;&#10;&#13;&#10; function computeFormula(f) {&#13;&#10; if (!f) return null;&#13;&#10; var tl = STATS.tl;&#13;&#10; switch (f.kind) {&#13;&#10; case 'scale': return cScale(tl, f.low, f.high, f.power, f.add, f.shift);&#13;&#10; case 'limit': return cLimit(tl, f.limit, f.low, f.high);&#13;&#10; case 'spell': return cDamage(tl, f.base, f.max, STATS.sp);&#13;&#10; case 'mind': return cDamage(tl, f.base, f.max, STATS.mp);&#13;&#10; case 'level': return f.a + f.b * tl;&#13;&#10; case 'const': return f.value;&#13;&#10; }&#13;&#10; return null;&#13;&#10; }&#13;&#10;&#13;&#10; function computeArg(a, t) {&#13;&#10; if (!a) return null;&#13;&#10; var v = null;&#13;&#10; if (a.t === 'const') v = a.v;&#13;&#10; else if (a.t === 'formula') v = computeFormula(a);&#13;&#10; else if (a.t === 'talent_radius') v = (t.radius != null ? t.radius : 1);&#13;&#10; else if (a.t === 'char') v = null;&#13;&#10; if (v == null) return null;&#13;&#10; if (a.ops) {&#13;&#10; a.ops.forEach(function (op) {&#13;&#10; if (op[0] === '*') v *= op[1];&#13;&#10; else if (op[0] === '/') v /= op[1];&#13;&#10; else if (op[0] === '+') v += op[1];&#13;&#10; else if (op[0] === '-') v -= op[1];&#13;&#10; });&#13;&#10; }&#13;&#10; return v;&#13;&#10; }&#13;&#10;&#13;&#10; function fmtVal(v, spec) {&#13;&#10; if (v == null) return null;&#13;&#10; var dec = 0;&#13;&#10; var m = /%(\d*)\.?(\d*)([dfs])/.exec(spec);&#13;&#10; if (m &amp;&amp; m[2]) dec = parseInt(m[2], 10);&#13;&#10; if (m &amp;&amp; m[3] === 'd') dec = 0;&#13;&#10; if (dec &gt; 0) return v.toFixed(dec);&#13;&#10; return String(Math.round(v));&#13;&#10; }&#13;&#10;&#13;&#10; // 把模板里的 %d/%0.2f 换成计算值，可算的用 &lt;b&gt; 高亮&#13;&#10; function renderDesc(t, template) {&#13;&#10; if (!template) return { html: '', n: 0, ok: 0 };&#13;&#10; if (!t.fmt) {&#13;&#10; return { html: esc(template).replace(/%%/g, '%').replace(/\n/g, '&lt;br&gt;'), n: 0, ok: 0 };&#13;&#10; }&#13;&#10; var args = t.fmt.args, idx = 0, ok = 0, total = 0;&#13;&#10; var out = esc(template).replace(/%[\d.]*[dsf]/g, function (spec) {&#13;&#10; total++;&#13;&#10; var a = args[idx]; idx++;&#13;&#10; var v = computeArg(a, t);&#13;&#10; if (v == null) return '&lt;span class="t-ph"&gt;' + spec + '&lt;/span&gt;';&#13;&#10; ok++;&#13;&#10; return '&lt;b class="t-calc"&gt;' + fmtVal(v, spec) + '&lt;/b&gt;';&#13;&#10; });&#13;&#10; // Lua 的 format 里 %% 是转义的字面 %&#13;&#10; out = out.replace(/%%/g, '%');&#13;&#10; return { html: out.replace(/\n/g, '&lt;br&gt;'), n: total, ok: ok };&#13;&#10; }&#13;&#10;&#13;&#10; function activeSet() {&#13;&#10; if (klass) return treeSets[klass];&#13;&#10; if (race) return treeSets[race];&#13;&#10; return null;&#13;&#10; }&#13;&#10;&#13;&#10; function matches(t) {&#13;&#10; var s = activeSet();&#13;&#10; if (s &amp;&amp; !s.has(t.tree)) return false;&#13;&#10; if (cat &amp;&amp; t.category !== cat) return false;&#13;&#10; if (tree &amp;&amp; t.tree !== tree) return false;&#13;&#10; if (!q) return true;&#13;&#10; var lq = q.toLowerCase();&#13;&#10; return (t.name || '').toLowerCase().indexOf(lq) &gt;= 0 ||&#13;&#10; (t.name_zh || '').indexOf(q) &gt;= 0 ||&#13;&#10; (t.desc_zh || '').indexOf(q) &gt;= 0 ||&#13;&#10; (t.desc_en || '').toLowerCase().indexOf(lq) &gt;= 0 ||&#13;&#10; (t.tree || '').toLowerCase().indexOf(lq) &gt;= 0;&#13;&#10; }&#13;&#10;&#13;&#10; function render() {&#13;&#10; var all = D.talents;&#13;&#10; var list = all.filter(matches);&#13;&#10; var h = '';&#13;&#10;&#13;&#10; // 统计&#13;&#10; h += '&lt;div class="tome-stats"&gt;';&#13;&#10; h += stat(D.meta.talent_count, '天赋总数');&#13;&#10; h += stat(D.meta.tree_count, '天赋树');&#13;&#10; h += stat((D.meta.class_count || 0) + '/' + (D.meta.race_count || 0), '职业/种族');&#13;&#10; h += stat(list.length, '当前结果');&#13;&#10; h += '&lt;/div&gt;';&#13;&#10;&#13;&#10; // 搜索&#13;&#10; h += '&lt;div class="tome-search"&gt;';&#13;&#10; h += '&lt;input type="text" id="tomeQ" placeholder="搜索天赋名 / 描述 / 天赋树（中英文都可以）" value="' + esc(q) + '"&gt;';&#13;&#10; h += '&lt;button id="tomeReset"&gt;重置&lt;/button&gt;';&#13;&#10; h += '&lt;/div&gt;';&#13;&#10;&#13;&#10; // 角色参数（影响描述里的数值）&#13;&#10; h += '&lt;div class="tome-params"&gt;';&#13;&#10; h += '&lt;span class="tp-label"&gt;角色参数&lt;/span&gt;';&#13;&#10; h += '&lt;label&gt;天赋等级 &lt;select id="tpTl"&gt;';&#13;&#10; for (var lv = 1; lv &lt;= 5; lv++) {&#13;&#10; h += '&lt;option value="' + lv + '"' + (STATS.tl === lv ? ' selected' : '') + '&gt;Lv ' + lv + '&lt;/option&gt;';&#13;&#10; }&#13;&#10; h += '&lt;/select&gt;&lt;/label&gt;';&#13;&#10; h += '&lt;label&gt;法术强度 &lt;input type="number" id="tpSp" value="' + STATS.sp + '" min="0" max="400" step="5"&gt;&lt;/label&gt;';&#13;&#10; h += '&lt;label&gt;精神强度 &lt;input type="number" id="tpMp" value="' + STATS.mp + '" min="0" max="400" step="5"&gt;&lt;/label&gt;';&#13;&#10; h += '&lt;span class="tp-hint"&gt;用于计算描述中的数值&lt;/span&gt;';&#13;&#10; h += '&lt;/div&gt;';&#13;&#10;&#13;&#10; // 类别&#13;&#10; var cats = {};&#13;&#10; all.forEach(function (t) { cats[t.category] = (cats[t.category] || 0) + 1; });&#13;&#10; h += '&lt;div class="tome-flabel"&gt;类别&lt;/div&gt;';&#13;&#10; h += '&lt;div class="tome-chips"&gt;';&#13;&#10; h += chip('全部', '', !cat, all.length, 'cat');&#13;&#10; Object.keys(cats).sort(function (a, b) { return cats[b] - cats[a]; }).forEach(function (c) {&#13;&#10; h += chip((D.category_zh &amp;&amp; D.category_zh[c]) || c, c, cat === c, cats[c], 'cat');&#13;&#10; });&#13;&#10; h += '&lt;/div&gt;';&#13;&#10;&#13;&#10; // 职业&#13;&#10; h += '&lt;div class="tome-flabel"&gt;职业&lt;/div&gt;';&#13;&#10; h += '&lt;div class="tome-chips"&gt;';&#13;&#10; h += chip('全部', '', !klass, 0, 'class');&#13;&#10; (D.classes || []).forEach(function (c) {&#13;&#10; h += chip(c.name, c.name, klass === c.name, 0, 'class');&#13;&#10; });&#13;&#10; h += '&lt;/div&gt;';&#13;&#10;&#13;&#10; // 种族&#13;&#10; h += '&lt;div class="tome-flabel"&gt;种族&lt;/div&gt;';&#13;&#10; h += '&lt;div class="tome-chips"&gt;';&#13;&#10; h += chip('全部', '', !race, 0, 'race');&#13;&#10; (D.races || []).forEach(function (r) {&#13;&#10; h += chip(r.name, r.name, race === r.name, 0, 'race');&#13;&#10; });&#13;&#10; h += '&lt;/div&gt;';&#13;&#10;&#13;&#10; // 天赋树（选了类别才显示）&#13;&#10; if (cat) {&#13;&#10; var trees = D.trees.filter(function (t) { return t.category === cat; });&#13;&#10; h += '&lt;div class="tome-flabel"&gt;天赋树&lt;/div&gt;';&#13;&#10; h += '&lt;div class="tome-chips tome-chips-sm"&gt;';&#13;&#10; h += chip('全部树', '', !tree, 0, 'tree');&#13;&#10; trees.forEach(function (t) {&#13;&#10; h += chip(t.name, t.id, tree === t.id, t.count, 'tree');&#13;&#10; });&#13;&#10; h += '&lt;/div&gt;';&#13;&#10; }&#13;&#10;&#13;&#10; // 列表&#13;&#10; if (!list.length) {&#13;&#10; h += '&lt;div class="tome-empty"&gt;没有匹配的天赋。&lt;/div&gt;';&#13;&#10; } else {&#13;&#10; list.slice(0, shown).forEach(function (t) { h += card(t); });&#13;&#10; if (list.length &gt; shown) {&#13;&#10; h += '&lt;button class="tome-more" id="tomeMore"&gt;显示更多（还有 ' +&#13;&#10; (list.length - shown) + ' 个）&lt;/button&gt;';&#13;&#10; }&#13;&#10; }&#13;&#10;&#13;&#10; h += '&lt;div class="tome-foot"&gt;数据提取自 ToME4 游戏本体 · ' + esc(D.meta.generated) + '&lt;/div&gt;';&#13;&#10; root.innerHTML = h;&#13;&#10; bind();&#13;&#10; }&#13;&#10;&#13;&#10; function bind() {&#13;&#10; var input = document.getElementById('tomeQ');&#13;&#10; var timer = null;&#13;&#10; input.addEventListener('input', function () {&#13;&#10; clearTimeout(timer);&#13;&#10; timer = setTimeout(function () {&#13;&#10; q = input.value.trim();&#13;&#10; shown = PAGE;&#13;&#10; render();&#13;&#10; var el = document.getElementById('tomeQ');&#13;&#10; if (el) { el.focus(); el.setSelectionRange(el.value.length, el.value.length); }&#13;&#10; }, 220);&#13;&#10; });&#13;&#10;&#13;&#10; document.getElementById('tomeReset').addEventListener('click', function () {&#13;&#10; q = ''; cat = null; tree = null; klass = null; race = null; shown = PAGE; render();&#13;&#10; });&#13;&#10;&#13;&#10; root.querySelectorAll('.tome-chip').forEach(function (c) {&#13;&#10; c.addEventListener('click', function () {&#13;&#10; var kind = c.getAttribute('data-kind');&#13;&#10; var val = c.getAttribute('data-val') || null;&#13;&#10; if (kind === 'cat') { cat = (cat === val) ? null : val; tree = null; }&#13;&#10; else if (kind === 'class') { klass = (klass === val) ? null : val; if (klass) race = null; }&#13;&#10; else if (kind === 'race') { race = (race === val) ? null : val; if (race) klass = null; }&#13;&#10; else { tree = (tree === val) ? null : val; }&#13;&#10; shown = PAGE;&#13;&#10; render();&#13;&#10; });&#13;&#10; });&#13;&#10;&#13;&#10; var more = document.getElementById('tomeMore');&#13;&#10; if (more) more.addEventListener('click', function () { shown += PAGE; render(); });&#13;&#10;&#13;&#10; // 角色参数&#13;&#10; var tlSel = document.getElementById('tpTl');&#13;&#10; if (tlSel) tlSel.addEventListener('change', function () {&#13;&#10; STATS.tl = parseInt(tlSel.value, 10) || 5;&#13;&#10; render();&#13;&#10; });&#13;&#10; ['tpSp', 'tpMp'].forEach(function (id) {&#13;&#10; var el = document.getElementById(id);&#13;&#10; if (!el) return;&#13;&#10; var key = id === 'tpSp' ? 'sp' : 'mp';&#13;&#10; el.addEventListener('change', function () {&#13;&#10; STATS[key] = parseInt(el.value, 10) || 0;&#13;&#10; render();&#13;&#10; });&#13;&#10; });&#13;&#10;&#13;&#10; root.querySelectorAll('.t-toggle').forEach(function (b) {&#13;&#10; b.addEventListener('click', function () {&#13;&#10; var c = b.closest('.tome-item');&#13;&#10; c.classList.toggle('open');&#13;&#10; b.textContent = c.classList.contains('open') ? '收起英文' : '英文原文';&#13;&#10; });&#13;&#10; });&#13;&#10; }&#13;&#10;&#13;&#10; function stat(n, label) {&#13;&#10; return '&lt;div class="tome-stat"&gt;&lt;span class="ts-num"&gt;' + n +&#13;&#10; '&lt;/span&gt;&lt;span class="ts-label"&gt;' + esc(label) + '&lt;/span&gt;&lt;/div&gt;';&#13;&#10; }&#13;&#10;&#13;&#10; function chip(label, val, active, count, kind) {&#13;&#10; return '&lt;button class="tome-chip' + (active ? ' active' : '') +&#13;&#10; '" data-kind="' + kind + '" data-val="' + esc(val) + '"&gt;' +&#13;&#10; esc(label) + (count ? ' &lt;span class="tc-n"&gt;' + count + '&lt;/span&gt;' : '') + '&lt;/button&gt;';&#13;&#10; }&#13;&#10;&#13;&#10; function fmtNum(v) {&#13;&#10; if (v == null) return '—';&#13;&#10; if (Number.isInteger(v)) return String(v);&#13;&#10; var a = Math.abs(v);&#13;&#10; if (a &gt;= 100) return v.toFixed(0);&#13;&#10; if (a &gt;= 10) return v.toFixed(1);&#13;&#10; return v.toFixed(2).replace(/0$/, '');&#13;&#10; }&#13;&#10;&#13;&#10; function card(t) {&#13;&#10; var title = t.name_zh || t.name;&#13;&#10; var sub = t.name_zh ? t.name : '';&#13;&#10;&#13;&#10; var h = '&lt;article class="tome-item"&gt;';&#13;&#10; h += '&lt;div class="t-body"&gt;';&#13;&#10;&#13;&#10; // 图标&#13;&#10; h += '&lt;div class="t-icon"&gt;';&#13;&#10; if (t.icon) {&#13;&#10; h += '&lt;img src="' + ICON_BASE + esc(t.icon) + '" alt="" loading="lazy" width="32" height="32"&gt;';&#13;&#10; } else {&#13;&#10; h += '&lt;span class="t-icon-ph"&gt;&lt;/span&gt;';&#13;&#10; }&#13;&#10; h += '&lt;/div&gt;';&#13;&#10;&#13;&#10; h += '&lt;div class="t-main"&gt;';&#13;&#10;&#13;&#10; h += '&lt;div class="t-head"&gt;';&#13;&#10; h += '&lt;h3 class="t-name"&gt;' + esc(title);&#13;&#10; if (sub) h += ' &lt;span class="t-name-en"&gt;' + esc(sub) + '&lt;/span&gt;';&#13;&#10; h += '&lt;/h3&gt;';&#13;&#10; h += '&lt;div class="t-badges"&gt;';&#13;&#10; h += '&lt;span class="t-mode t-mode-' + esc(t.mode) + '"&gt;' + esc(MODE_ZH[t.mode] || t.mode) + '&lt;/span&gt;';&#13;&#10; if (t.tier) h += '&lt;span class="t-tier"&gt;T' + t.tier + '&lt;/span&gt;';&#13;&#10; h += '&lt;/div&gt;&lt;/div&gt;';&#13;&#10;&#13;&#10; h += '&lt;div class="t-meta"&gt;';&#13;&#10; h += '&lt;span class="t-tree"&gt;' + esc(t.tree) + '&lt;/span&gt;';&#13;&#10; if (t.cooldown != null) h += '&lt;span&gt;冷却 ' + t.cooldown + '&lt;/span&gt;';&#13;&#10; if (t.range != null) h += '&lt;span&gt;射程 ' + t.range + '&lt;/span&gt;';&#13;&#10; if (t.costs) {&#13;&#10; Object.keys(t.costs).forEach(function (k) {&#13;&#10; if (k === 'cost_func') return;&#13;&#10; var v = t.costs[k];&#13;&#10; h += '&lt;span&gt;' + esc(COST_ZH[k] || k) + ' ' + (Array.isArray(v) ? v.join('/') : v) + '&lt;/span&gt;';&#13;&#10; });&#13;&#10; }&#13;&#10; if (t.points) h += '&lt;span&gt;可投 ' + t.points + ' 点&lt;/span&gt;';&#13;&#10; h += '&lt;/div&gt;';&#13;&#10;&#13;&#10; var descTpl = t.desc_zh || t.desc_en || '';&#13;&#10; if (descTpl) {&#13;&#10; var rd = renderDesc(t, descTpl);&#13;&#10; h += '&lt;div class="t-desc"&gt;' + rd.html + '&lt;/div&gt;';&#13;&#10; if (rd.n &gt; 0) {&#13;&#10; var cls = rd.ok === rd.n ? 'ok' : (rd.ok &gt; 0 ? 'part' : 'none');&#13;&#10; h += '&lt;div class="t-calcnote ' + cls + '"&gt;数值 ' + rd.ok + '/' + rd.n +&#13;&#10; (rd.ok &lt; rd.n ? ' 可算（其余依赖武器/随机因素）' : ' 已全部计算') + '&lt;/div&gt;';&#13;&#10; }&#13;&#10; }&#13;&#10;&#13;&#10; // 等级成长&#13;&#10; if (t.scaling &amp;&amp; t.scaling.length) {&#13;&#10; h += '&lt;div class="t-scale"&gt;';&#13;&#10; t.scaling.forEach(function (s) {&#13;&#10; var label = scaleLabel(s.name);&#13;&#10; h += '&lt;div class="ts-row"&gt;&lt;span class="ts-name"&gt;' + esc(label) + '&lt;/span&gt;&lt;span class="ts-vals"&gt;';&#13;&#10; s.levels.forEach(function (v, i) {&#13;&#10; h += '&lt;span class="ts-v' + (i === 0 ? ' first' : '') + (i === 4 ? ' last' : '') + '"&gt;' + fmtNum(v) + '&lt;/span&gt;';&#13;&#10; });&#13;&#10; h += '&lt;/span&gt;&lt;/div&gt;';&#13;&#10; });&#13;&#10; h += '&lt;div class="ts-legend"&gt;&lt;span&gt;&lt;/span&gt;等级 1 → 5&lt;/div&gt;';&#13;&#10; h += '&lt;/div&gt;';&#13;&#10; }&#13;&#10;&#13;&#10; if (t.desc_en &amp;&amp; t.desc_zh) {&#13;&#10; h += '&lt;div class="t-en"&gt;' + esc(t.desc_en).replace(/\n/g, '&lt;br&gt;') + '&lt;/div&gt;';&#13;&#10; h += '&lt;button class="t-toggle"&gt;英文原文&lt;/button&gt;';&#13;&#10; }&#13;&#10;&#13;&#10; h += '&lt;/div&gt;&lt;/div&gt;&lt;/article&gt;';&#13;&#10; return h;&#13;&#10; }&#13;&#10;})();&#13;&#10;&lt;/script&gt;&#13;&#10;</description></item><item><title>服务台</title><link>https://cloudlake.eu.org/services/</link><pubDate>Tue, 20 Oct 2026 00:00:00 +0000</pubDate><guid>https://cloudlake.eu.org/services/</guid><description>&lt;p&gt;这套站点运行在一台 &lt;strong&gt;1 核 / 960 MB&lt;/strong&gt; 的 VPS 上（洛杉矶，Debian 12），除了 DNS 和证书签发，&lt;strong&gt;没有任何 SaaS 依赖&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;div class="pgrid"&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;站点&lt;/span&gt;&lt;span class="pcard-year"&gt;橙云 · 抗封锁&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;a href="https://cloudlake.eu.org/" target="_blank" rel="noopener"&gt;博客 · 主站&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;Hugo + Stack 主题，Cloudflare 代理。文章、实验、项目都在这里。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/" target="_blank" rel="noopener"&gt;打开 ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;站点&lt;/span&gt;&lt;span class="pcard-year"&gt;灰云直连&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;a href="https://deadline.eu.org/" target="_blank" rel="noopener"&gt;博客 · 镜像&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;同一份内容的直连入口，CN2 GIA 线路，比橙云快一倍。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://deadline.eu.org/" target="_blank" rel="noopener"&gt;打开 ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;运维&lt;/span&gt;&lt;span class="pcard-year"&gt;需要登录&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;a href="https://status.cloudlake.eu.org/" target="_blank" rel="noopener"&gt;监控 · Uptime Kuma&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;每分钟探测 4 个站点，记录可用性与响应时间。故障时可推送告警。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://status.cloudlake.eu.org/" target="_blank" rel="noopener"&gt;登录 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;运维&lt;/span&gt;&lt;span class="pcard-year"&gt;需要登录&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;a href="https://stats.cloudlake.eu.org/" target="_blank" rel="noopener"&gt;统计 · GoatCounter&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;无 Cookie、无追踪的访问统计。首页的访客数字就来自这里。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://stats.cloudlake.eu.org/" target="_blank" rel="noopener"&gt;登录 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;工具&lt;/span&gt;&lt;span class="pcard-year"&gt;需要登录&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;a href="https://files.cloudlake.eu.org/" target="_blank" rel="noopener"&gt;文件 · FileBrowser&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;网页版文件管理，可以直接浏览、上传、下载服务器上的博客、备份和配置。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://files.cloudlake.eu.org/" target="_blank" rel="noopener"&gt;登录 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;游戏&lt;/span&gt;&lt;span class="pcard-year"&gt;公开 · 无需登录&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;a href="https://xiangqi.cloudlake.eu.org/" target="_blank" rel="noopener"&gt;对弈 · 中国象棋&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;在线对战：创建房间生成 4 位房间码，服务端权威校验、观战、聊天、断线重连。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://xiangqi.cloudlake.eu.org/" target="_blank" rel="noopener"&gt;打开 ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;/div&gt;&#13;&#10;</description></item><item><title>论文雷达</title><link>https://cloudlake.eu.org/radar/</link><pubDate>Tue, 20 Oct 2026 00:00:00 +0000</pubDate><guid>https://cloudlake.eu.org/radar/</guid><description>&lt;p&gt;每天从 arXiv 抓取 &lt;strong&gt;cs.GR / cs.CV / cs.LG / cs.AI / cs.HC / cs.MM&lt;/strong&gt; 的新论文，按方向打分后只留下最相关的几十篇。论文持久化在服务器上，每日凌晨自动更新。&lt;/p&gt;&#10;&lt;div class="radar" id="radar" data-src="https://cloudlake.eu.org/radar.json"&gt;&#13;&#10; &lt;div class="radar-loading"&gt;正在加载论文…&lt;/div&gt;&#13;&#10;&lt;/div&gt;&#13;&#10;&lt;script&gt;&#13;&#10;(function () {&#13;&#10; var root = document.getElementById('radar');&#13;&#10; if (!root) return;&#13;&#10; var DATA = null;&#13;&#10; var activeTopic = null;&#13;&#10;&#13;&#10; fetch(root.getAttribute('data-src'), { cache: 'no-store' })&#13;&#10; .then(function (r) { return r.ok ? r.json() : Promise.reject(); })&#13;&#10; .then(function (d) { DATA = d; render(); })&#13;&#10; .catch(function () {&#13;&#10; root.innerHTML = '&lt;div class="radar-empty"&gt;雷达数据加载失败，稍后再试。&lt;/div&gt;';&#13;&#10; });&#13;&#10;&#13;&#10; function esc(s) {&#13;&#10; return String(s == null ? '' : s).replace(/[&amp;&lt;&gt;"']/g, function (c) {&#13;&#10; return { '&amp;': '&amp;amp;', '&lt;': '&amp;lt;', '&gt;': '&amp;gt;', '"': '&amp;quot;', "'": '&amp;#39;' }[c];&#13;&#10; });&#13;&#10; }&#13;&#10;&#13;&#10; function render() {&#13;&#10; var d = DATA;&#13;&#10; var papers = d.papers || [];&#13;&#10; if (activeTopic) {&#13;&#10; papers = papers.filter(function (p) {&#13;&#10; return (p.matched || []).indexOf(activeTopic) &gt;= 0;&#13;&#10; });&#13;&#10; }&#13;&#10;&#13;&#10; var html = '';&#13;&#10;&#13;&#10; // ── 顶部统计 ──&#13;&#10; html += '&lt;div class="radar-stats"&gt;';&#13;&#10; html += stat(d.total_papers, '总库论文');&#13;&#10; html += stat(d.new_week, '本周新增');&#13;&#10; html += stat(d.new_today, '今日新增');&#13;&#10; html += stat(papers.length, '当前列表');&#13;&#10; html += '&lt;/div&gt;';&#13;&#10;&#13;&#10; // ── 话题筛选 ──&#13;&#10; if ((d.topics || []).length) {&#13;&#10; html += '&lt;div class="radar-filters"&gt;';&#13;&#10; html += chip('全部', papers.length, !activeTopic);&#13;&#10; d.topics.forEach(function (t) {&#13;&#10; html += chip(t.name, t.count, activeTopic === t.name);&#13;&#10; });&#13;&#10; html += '&lt;/div&gt;';&#13;&#10; }&#13;&#10;&#13;&#10; // ── 列表 ──&#13;&#10; if (!papers.length) {&#13;&#10; html += '&lt;div class="radar-empty"&gt;这个方向暂时没有新论文。&lt;/div&gt;';&#13;&#10; } else {&#13;&#10; papers.forEach(function (p, i) {&#13;&#10; html += item(p, i);&#13;&#10; });&#13;&#10; }&#13;&#10;&#13;&#10; html += '&lt;div class="radar-foot"&gt;数据来自 arXiv，每日自动更新 · 最后更新 ' +&#13;&#10; esc(d.updated) + '&lt;/div&gt;';&#13;&#10;&#13;&#10; root.innerHTML = html;&#13;&#10;&#13;&#10; // 事件绑定&#13;&#10; root.querySelectorAll('.radar-chip').forEach(function (c) {&#13;&#10; c.addEventListener('click', function () {&#13;&#10; var t = c.getAttribute('data-topic');&#13;&#10; activeTopic = (t === '__all__' || t === activeTopic) ? null : t;&#13;&#10; render();&#13;&#10; });&#13;&#10; });&#13;&#10; root.querySelectorAll('.r-toggle').forEach(function (b) {&#13;&#10; b.addEventListener('click', function () {&#13;&#10; var card = b.closest('.radar-item');&#13;&#10; card.classList.toggle('open');&#13;&#10; b.textContent = card.classList.contains('open') ? '收起摘要' : '摘要';&#13;&#10; });&#13;&#10; });&#13;&#10; }&#13;&#10;&#13;&#10; function stat(n, label) {&#13;&#10; return '&lt;div class="radar-stat"&gt;&lt;span class="rs-num"&gt;' +&#13;&#10; (n == null ? '—' : n) + '&lt;/span&gt;&lt;span class="rs-label"&gt;' +&#13;&#10; esc(label) + '&lt;/span&gt;&lt;/div&gt;';&#13;&#10; }&#13;&#10;&#13;&#10; function chip(name, count, active) {&#13;&#10; var t = name === '全部' ? '__all__' : name;&#13;&#10; return '&lt;button class="radar-chip' + (active ? ' active' : '') +&#13;&#10; '" data-topic="' + esc(t) + '"&gt;' + esc(name) +&#13;&#10; ' &lt;span class="rc-count"&gt;' + count + '&lt;/span&gt;&lt;/button&gt;';&#13;&#10; }&#13;&#10;&#13;&#10; function item(p, idx) {&#13;&#10; var cat = (p.categories &amp;&amp; p.categories[0]) || p.primary_cat || '';&#13;&#10; var authors = (p.authors || []);&#13;&#10; var authorStr = authors.slice(0, 3).join(', ');&#13;&#10; if (authors.length &gt; 3) authorStr += ' 等 ' + authors.length + ' 人';&#13;&#10;&#13;&#10; var h = '&lt;article class="radar-item"&gt;';&#13;&#10; h += '&lt;div class="r-head"&gt;';&#13;&#10; h += '&lt;span class="r-cat"&gt;' + esc(cat) + '&lt;/span&gt;';&#13;&#10; h += '&lt;span class="r-date"&gt;' + esc((p.published || '').slice(0, 10)) + '&lt;/span&gt;';&#13;&#10; if (p.is_new) h += '&lt;span class="r-new"&gt;NEW&lt;/span&gt;';&#13;&#10; h += '&lt;/div&gt;';&#13;&#10;&#13;&#10; h += '&lt;h3 class="r-title"&gt;&lt;a href="' + esc(p.abs_url) +&#13;&#10; '" target="_blank" rel="noopener"&gt;' + esc(p.title) + '&lt;/a&gt;&lt;/h3&gt;';&#13;&#10;&#13;&#10; if (authorStr) {&#13;&#10; h += '&lt;div class="r-authors"&gt;' + esc(authorStr) + '&lt;/div&gt;';&#13;&#10; }&#13;&#10;&#13;&#10; if ((p.matched || []).length) {&#13;&#10; h += '&lt;div class="r-topics"&gt;';&#13;&#10; p.matched.forEach(function (t) {&#13;&#10; h += '&lt;span class="r-topic"&gt;' + esc(t) + '&lt;/span&gt;';&#13;&#10; });&#13;&#10; h += '&lt;/div&gt;';&#13;&#10; }&#13;&#10;&#13;&#10; h += '&lt;div class="r-summary"&gt;' + esc(p.abstract || '') + '&lt;/div&gt;';&#13;&#10;&#13;&#10; h += '&lt;div class="r-actions"&gt;';&#13;&#10; h += '&lt;button class="r-toggle"&gt;摘要&lt;/button&gt;';&#13;&#10; h += '&lt;a href="' + esc(p.abs_url) + '" target="_blank" rel="noopener"&gt;arXiv&lt;/a&gt;';&#13;&#10; h += '&lt;a href="https://cloudlake.eu.org/pdf/' + esc(p.id) + '" target="_blank" rel="noopener" ' +&#13;&#10; 'title="由服务器缓存后传输，国内访问更快"&gt;PDF ⚡&lt;/a&gt;';&#13;&#10; if (p.comment) {&#13;&#10; h += '&lt;span class="r-comment"&gt;' + esc(p.comment.slice(0, 80)) + '&lt;/span&gt;';&#13;&#10; }&#13;&#10; h += '&lt;/div&gt;';&#13;&#10;&#13;&#10; h += '&lt;/article&gt;';&#13;&#10; return h;&#13;&#10; }&#13;&#10;})();&#13;&#10;&lt;/script&gt;&#13;&#10;</description></item><item><title>关于</title><link>https://cloudlake.eu.org/about/</link><pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate><guid>https://cloudlake.eu.org/about/</guid><description>&lt;p&gt;我是 &lt;strong&gt;CloudLake&lt;/strong&gt;，香港理工大学 Metaverse Technology 方向硕士，本科就读于东北师范大学。&lt;/p&gt;&#10;&lt;p&gt;我构建 &lt;strong&gt;XR 与游戏客户端软件&lt;/strong&gt;，用 Unity 和 C#，喜欢图形渲染、网络同步与状态机交汇的地方。最近的几件事：把二进制电路做成立在客厅里的混合现实解谜、复刻那些藏在老游戏里的小游戏，以及把「一张照片变成一个可以走进的三维模型」这条管线跑通。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;AI 辅助开发是我的默认工作流。&lt;/strong&gt; BinaryPathway 是让 AI 代理通过 MCP 驱动 Unity 编辑器做出来的；我也把 LLM 接进自己的服务里——DeepSeek 决策控制器、ComfyUI 生成管线。我关心的是这些模型怎么工作、怎么调试，而不只是怎么向它们提问。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;最近的一个执念：&lt;strong&gt;把喜欢的老游戏里藏着的小游戏重新做一遍——通常还会给它配一个求解器。&lt;/strong&gt;&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;h2 id="经历与荣誉"&gt;&lt;a href="#%e7%bb%8f%e5%8e%86%e4%b8%8e%e8%8d%a3%e8%aa%89" class="header-anchor"&gt;&lt;/a&gt;经历与荣誉&#10;&lt;/h2&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Dean&amp;rsquo;s Honours List&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;香港理工大学 · 元宇宙技术硕士 · 专业前 5%&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;COMPUTHON 2026 冠军&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;研究生组 · 个人参赛，队伍名 Anti-DDL&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;研究方向&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;实时生成式三维与 XR&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;论文&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;A System for Near Real-Time Generation and Runtime Visualization of Generative 3D Models in XR Environments（IEEE 会议格式）&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h2 id="这里在写什么"&gt;&lt;a href="#%e8%bf%99%e9%87%8c%e5%9c%a8%e5%86%99%e4%bb%80%e4%b9%88" class="header-anchor"&gt;&lt;/a&gt;这里在写什么&#10;&lt;/h2&gt;&lt;p&gt;每一篇都围绕同一条主线：&lt;strong&gt;从零实现，然后用证据证明它是对的。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;h3 id="做研究"&gt;&lt;a href="#%e5%81%9a%e7%a0%94%e7%a9%b6" class="header-anchor"&gt;&lt;/a&gt;做研究&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://cloudlake.eu.org/p/xr-generative-3d/" &gt;对着杯子按一下扳机：把生成式 3D 接进 XR 运行时&lt;/a&gt; —— 一张照片变成头显里可以转动的模型&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://cloudlake.eu.org/p/visionmate/" &gt;给 AI 装上一双能测距的眼睛&lt;/a&gt; —— YOLO + MiDaS + 激光雷达的感知栈&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="造东西"&gt;&lt;a href="#%e9%80%a0%e4%b8%9c%e8%a5%bf" class="header-anchor"&gt;&lt;/a&gt;造东西&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://cloudlake.eu.org/p/factorio-lab/" &gt;615 张蓝图，6.6 秒：我把《异星工厂》的蓝图拆开了&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://cloudlake.eu.org/p/kiln/" &gt;没有 nasm 也没有 qemu，我从零写了汇编器和模拟器&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://cloudlake.eu.org/p/loom/" &gt;17 个词画出一朵玫瑰&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://cloudlake.eu.org/p/primordium/" &gt;摩擦越大，原始汤越活&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://cloudlake.eu.org/p/zehnscope/" &gt;拆开 TI-Nspire 的 .tns 看里面&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://cloudlake.eu.org/p/chinese-cheese/" &gt;中国象棋：perft 证明我的规则写对了&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="想事情"&gt;&lt;a href="#%e6%83%b3%e4%ba%8b%e6%83%85" class="header-anchor"&gt;&lt;/a&gt;想事情&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://cloudlake.eu.org/p/computhon-guangergaozhi/" &gt;广而告知：像投放广告一样投放知识&lt;/a&gt; —— COMPUTHON 2026 冠军方案&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://cloudlake.eu.org/p/computhon-solo/" &gt;一个人的 COMPUTHON 2026&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://cloudlake.eu.org/p/ai-evolution/" &gt;让 AI 给自己写决策函数&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a class="link" href="https://cloudlake.eu.org/p/cdda-memorial/" &gt;大灾变纪念馆：从存档里读出五个人&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="能直接玩的"&gt;&lt;a href="#%e8%83%bd%e7%9b%b4%e6%8e%a5%e7%8e%a9%e7%9a%84" class="header-anchor"&gt;&lt;/a&gt;能直接玩的&#10;&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://cloudlake.eu.org/lab/" &gt;&lt;strong&gt;实验页&lt;/strong&gt;&lt;/a&gt; 里有 10 个在线可跑的东西——包括完整的 &lt;strong&gt;Shattered Pixel Dungeon&lt;/strong&gt;、三个解谜游戏，以及几个能改参数看结果的实验台。&lt;/p&gt;&#10;&lt;h2 id="技术栈"&gt;&lt;a href="#%e6%8a%80%e6%9c%af%e6%a0%88" class="header-anchor"&gt;&lt;/a&gt;技术栈&#10;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;语言&lt;/strong&gt; &lt;code&gt;C#&lt;/code&gt; · &lt;code&gt;Python&lt;/code&gt; · &lt;code&gt;Java&lt;/code&gt; · &lt;code&gt;C&lt;/code&gt; · &lt;code&gt;JavaScript&lt;/code&gt; · &lt;code&gt;TypeScript&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;XR 与游戏&lt;/strong&gt; &lt;code&gt;Unity 6&lt;/code&gt; · &lt;code&gt;OpenXR&lt;/code&gt; · &lt;code&gt;Meta Quest 3&lt;/code&gt; · &lt;code&gt;Meta XR SDK&lt;/code&gt; · &lt;code&gt;Godot&lt;/code&gt; · &lt;code&gt;Cocos Creator&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;AI 与后端&lt;/strong&gt; &lt;code&gt;PyTorch&lt;/code&gt; · &lt;code&gt;Flask&lt;/code&gt; · &lt;code&gt;FastAPI&lt;/code&gt; · &lt;code&gt;ComfyUI&lt;/code&gt; · &lt;code&gt;Hunyuan3D&lt;/code&gt; · &lt;code&gt;YOLOv8&lt;/code&gt; · &lt;code&gt;MiDaS&lt;/code&gt; · &lt;code&gt;Whisper&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;AI 辅助开发&lt;/strong&gt; &lt;code&gt;Claude Code&lt;/code&gt; · &lt;code&gt;MCP&lt;/code&gt; · &lt;code&gt;DeepSeek API&lt;/code&gt; · &lt;code&gt;ComfyUI pipelines&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;其他&lt;/strong&gt; &lt;code&gt;Git&lt;/code&gt; · &lt;code&gt;WinForms / WPF&lt;/code&gt; · &lt;code&gt;Electron&lt;/code&gt; · &lt;code&gt;Caddy&lt;/code&gt;&lt;/p&gt;&#10;&lt;h2 id="兴趣"&gt;&lt;a href="#%e5%85%b4%e8%b6%a3" class="header-anchor"&gt;&lt;/a&gt;兴趣&#10;&lt;/h2&gt;&lt;p&gt;主要集中在计算机科学中与数学、认知和经济学接壤的部分：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;核心 CS 与交互&lt;/strong&gt;：离散数学、算法、信息论、神经网络、人机交互、脑机接口&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;系统、市场与思想&lt;/strong&gt;：复杂系统、计算机安全、金融、经济学、历史&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;阅读与讨论：VR、生成式三维、解谜设计。&lt;/p&gt;&#10;&lt;h2 id="联系"&gt;&lt;a href="#%e8%81%94%e7%b3%bb" class="header-anchor"&gt;&lt;/a&gt;联系&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;GitHub：&lt;a class="link" href="https://github.com/STCloudLake" target="_blank" rel="noopener"&#10; &gt;STCloudLake&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;邮箱：&lt;a class="link" href="mailto:stcloudlake@gmail.com" &gt;stcloudlake@gmail.com&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;博客：&lt;a class="link" href="https://cloudlake.eu.org" target="_blank" rel="noopener"&#10; &gt;cloudlake.eu.org&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;所在地：Shenyang, China · 中文 / English&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;这个站点跑在一台自己的 VPS 上——监控、统计、文件管理、在线对弈全部自托管。&#10;完整清单在 &lt;a class="link" href="https://cloudlake.eu.org/services/" &gt;服务台&lt;/a&gt;。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;</description></item><item><title>实验</title><link>https://cloudlake.eu.org/lab/</link><pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate><guid>https://cloudlake.eu.org/lab/</guid><description>&lt;p&gt;这些都能直接在浏览器里跑，&lt;strong&gt;不需要安装任何东西&lt;/strong&gt;。两个解谜游戏还带原声音乐。&lt;/p&gt;&#10;&lt;div class="pgrid"&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;工具&lt;/span&gt;&lt;span class="pcard-year"&gt;1313 天赋 · 286 树&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;⚔️&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/tome/"&gt;ToME4 天赋查询&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;1313 个天赋的中英对照查询：图标、冷却、射程、消耗，以及随天赋等级的成长曲线。数据从游戏本体解析。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/tome/"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;模拟器&lt;/span&gt;&lt;span class="pcard-year"&gt;WebAssembly · 三种机型&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🧮&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/nspire/"&gt;TI-Nspire 在线模拟器&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;把 Firebird 模拟器编译成 WebAssembly，在浏览器里跑真实的 TI-Nspire OS + Ndless。经典 / CX II / Windows 95 三种机型，虚拟 USB 文件传输、nPal 一键启动、用户名登录的长期存档。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/nspire/"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;街机&lt;/span&gt;&lt;span class="pcard-year"&gt;WebAssembly · 5 款 · 双人联机&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🕹️&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/nspire/arcade/hall.html"&gt;街机游戏厅&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;5 款街机原版同台：圆桌骑士（CPS1）、拳皇 2000、拳皇 97、月华剑士 1/2（NeoGeo）。FBA 核心编译成 WebAssembly，浏览器里 60fps + 真实音频；支持双人联机（房间码 + WebRTC 点对点直连，失败回落服务器中继）。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/nspire/arcade/hall.html"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;红警&lt;/span&gt;&lt;span class="pcard-year"&gt;v86 · 双人联机 · 资源自备&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🚩&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/nspire/ra2/"&gt;红色警戒 2 / 尤里的复仇 · 网页版&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;浏览器里跑原版《红色警戒 2》和《尤里的复仇》（支持共和国之辉 MOD）：v86 + 自研 Win32/DirectX 兼容层，导入本地游戏资源即可玩。支持单人遭遇战与双人联机（自建 WebSocket 虚拟局域网 relay）。游戏资源在浏览器本地导入，不上传服务器；桌面 Chrome/Edge。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/nspire/ra2/"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;棋牌&lt;/span&gt;&lt;span class="pcard-year"&gt;开房间联机 · 自托管 · 含 Buckshot&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;📦&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/nspire/cards/"&gt;棋牌室 · 斗地主 / 麻将 / 德州 / 21点 / Buckshot&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;自托管棋牌合集：斗地主（3 人 SSE）、麻将（4 人 Socket.IO）、德州扑克（2–10 人 + AI）、21 点（1–7 人），外加原创的 Buckshot 联机版（2 人回合制霰弹枪轮盘赌）。开房间把链接/房间码发给朋友即可联机；德州需注册账号。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/nspire/cards/"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;游戏&lt;/span&gt;&lt;span class="pcard-year"&gt;公网联机 · WebSocket&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🀄&lt;/span&gt;&lt;a href="https://xiangqi.cloudlake.eu.org/" target="_blank" rel="noopener"&gt;中国象棋 · 在线对战&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;和朋友实时对弈：创建房间生成 4 位房间码，服务端权威校验、观战、聊天、断线重连。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://xiangqi.cloudlake.eu.org/" target="_blank" rel="noopener"&gt;打开站外 ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;游戏&lt;/span&gt;&lt;span class="pcard-year"&gt;39 MB · 首次加载稍慢&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🗡️&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/lab/shattered/"&gt;Shattered Pixel Dungeon&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;完整的 Shattered PD 网页版：四种职业、完整地牢、原声音乐。电脑和手机都能玩。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/shattered/"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;游戏&lt;/span&gt;&lt;span class="pcard-year"&gt;16 MB · 含原声音乐&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;💠&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/lab/sigmar/"&gt;Sigmar's Garden&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;《Opus Magnum》里那个六边形弹珠接龙。完整规则引擎、保证可解的棋盘生成器，以及实时求解器。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/sigmar/"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;游戏&lt;/span&gt;&lt;span class="pcard-year"&gt;39 MB 音乐 · 按需加载&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🎴&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/lab/shenzhen/"&gt;Shenzhen Solitaire&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;《SHENZHEN I/O》里的麻将牌接龙。内置 11 首原声，可切曲、可循环。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/shenzhen/"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;游戏&lt;/span&gt;&lt;span class="pcard-year"&gt;1.9 MB · 零依赖&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;♟️&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/lab/xiangqi/"&gt;中国象棋&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;完整规则引擎配六档 AI，单机模式直接在这里下，不需要跑服务端。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/xiangqi/"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;存档重建&lt;/span&gt;&lt;span class="pcard-year"&gt;30 KB · 零依赖&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🕯️&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/lab/memorial/"&gt;大灾变纪念馆&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;从 10 份死亡存档里还原 5 个人。墓碑上的每个数字都能回溯到原始存档。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/memorial/"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;绘图语言&lt;/span&gt;&lt;span class="pcard-year"&gt;39 KB · 零依赖&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🧵&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/lab/loom/"&gt;Loom&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;17 个词的图灵完备语言。左边写程序，Ctrl+Enter 重跑，画布上出现图案。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/loom/"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;人工生命&lt;/span&gt;&lt;span class="pcard-year"&gt;40 KB · 零依赖&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🧬&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/lab/primordium/"&gt;Primordium&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;三条规则，最多 3000 个粒子。拖动画布可以抓起粒子搅拌，右侧五个指标实时可读。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/primordium/"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;逆向报告&lt;/span&gt;&lt;span class="pcard-year"&gt;137 KB · 零依赖&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🔬&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/lab/zehn/"&gt;Zehnscope&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;100 个 TI-Nspire 程序的容器解析报告，含重定位表、能力标志与兼容性判定。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/zehn/"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;实验工具&lt;/span&gt;&lt;span class="pcard-year"&gt;78 KB · 需自备 API Key&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🧠&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/lab/ai-memory/"&gt;AI 记忆测试&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;让 AI 在网格里收集分数，然后把决策日志变成函数、一代代进化它。需要填自己的 DeepSeek API Key。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/ai-memory/"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;蓝图平台&lt;/span&gt;&lt;span class="pcard-year"&gt;6 MB · 首次加载稍慢&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;⚙️&lt;/span&gt;&lt;a href="https://cloudlake.eu.org/lab/factorio/"&gt;Factorio Lab&lt;/a&gt;&lt;/h3&gt;&#13;&#10; &lt;p&gt;615 张蓝图、334,856 个实体的单文件查看器，含产出分析面板与产出速率计算。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/factorio/"&gt;打开 →&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;/div&gt;&#13;&#10;</description></item><item><title>项目</title><link>https://cloudlake.eu.org/projects/</link><pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate><guid>https://cloudlake.eu.org/projects/</guid><description>&lt;div class="pgrid"&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;研究&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🎯&lt;/span&gt;VisionMate&lt;/h3&gt;&#13;&#10; &lt;p&gt;端到端感知栈：FastAPI MCP 接口、规则+sklearn 意图调度、YOLOv8 检测、MiDaS 深度、EasyOCR 与 RPLIDAR A1 雷达融合。核心设计是「LiDAR 只做深度标定，不做危险判定」。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;Python&lt;/span&gt;&lt;span class="pcard-tech"&gt;FastAPI&lt;/span&gt;&lt;span class="pcard-tech"&gt;YOLOv8&lt;/span&gt;&lt;span class="pcard-tech"&gt;MiDaS&lt;/span&gt;&lt;span class="pcard-tech"&gt;RPLIDAR&lt;/span&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;实验&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🧠&lt;/span&gt;AI 决策函数进化&lt;/h3&gt;&#13;&#10; &lt;p&gt;让 AI 先亲自玩游戏收集决策日志，再把日志变成决策函数，然后一代代进化它。成本从 O(步数) 降到 O(1)，函数在 Web Worker 沙箱里执行。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;JavaScript&lt;/span&gt;&lt;span class="pcard-tech"&gt;DeepSeek API&lt;/span&gt;&lt;span class="pcard-tech"&gt;Web Worker&lt;/span&gt;&lt;span class="pcard-tech"&gt;沙箱&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/ai-memory/" target="_blank" rel="noopener"&gt;在线玩 ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;游戏&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;⚔️&lt;/span&gt;Shattered Pixel Dungeon (Web)&lt;/h3&gt;&#13;&#10; &lt;p&gt;把 Shattered Pixel Dungeon 搬进浏览器：用 TeaVM 把 Java 编译成 JS/WASM，服务端纯静态托管。精简掉 20 种内建语言后 39 MB，中英文完整，手机可玩。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;Java&lt;/span&gt;&lt;span class="pcard-tech"&gt;TeaVM&lt;/span&gt;&lt;span class="pcard-tech"&gt;libGDX&lt;/span&gt;&lt;span class="pcard-tech"&gt;WebAssembly&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/shattered/" target="_blank" rel="noopener"&gt;在线玩 ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;冠军项目&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;📣&lt;/span&gt;广而告知 Guang Er Gao Zhi&lt;/h3&gt;&#13;&#10; &lt;p&gt;COMPUTHON 2026 研究生组冠军。像投放广告一样投放知识：浏览器扩展把知识点做成 15 秒卡片，注入到新标签页、视频侧边栏和评论区。核心判断是「用户不需要更多功能，需要更少的意志力」。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;Chrome Extension&lt;/span&gt;&lt;span class="pcard-tech"&gt;Agentic AI&lt;/span&gt;&lt;span class="pcard-tech"&gt;Electron&lt;/span&gt;&lt;span class="pcard-tech"&gt;LLM&lt;/span&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;游戏&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🀄&lt;/span&gt;中国象棋 Chinese Cheese&lt;/h3&gt;&#13;&#10; &lt;p&gt;完整复刻中国象棋规则的网页游戏。七种棋子全部规则、六档可调难度 AI、局域网联机（服务端权威校验）。走法生成经 perft 深度 4 的 329 万个节点验证。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;JavaScript&lt;/span&gt;&lt;span class="pcard-tech"&gt;Canvas&lt;/span&gt;&lt;span class="pcard-tech"&gt;perft&lt;/span&gt;&lt;span class="pcard-tech"&gt;Alpha-Beta&lt;/span&gt;&lt;span class="pcard-tech"&gt;WebSocket&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/xiangqi/" target="_blank" rel="noopener"&gt;单机版 ↗&lt;/a&gt;&lt;a href="https://xiangqi.cloudlake.eu.org/" target="_blank" rel="noopener"&gt;在线对战 ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;实验&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🕯️&lt;/span&gt;大灾变纪念馆&lt;/h3&gt;&#13;&#10; &lt;p&gt;从 10 份游戏死亡存档里还原五个人的一生，并生成墓志铭——且用「每个数字都必须能在存档里找到出处」来约束生成，配反向验证（伪造数据必须被抓）。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;Python&lt;/span&gt;&lt;span class="pcard-tech"&gt;存档解析&lt;/span&gt;&lt;span class="pcard-tech"&gt;可核查声明&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/memorial/" target="_blank" rel="noopener"&gt;在线看 ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;实验&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🔬&lt;/span&gt;Zehnscope&lt;/h3&gt;&#13;&#10; &lt;p&gt;逆向 TI-Nspire 的 .tns / Zehn 容器格式。用「逐字节重建 100 个真实容器」证明读懂了格式，并手写了一个 DEFLATE 解码器对照系统 zlib 校验。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;Python&lt;/span&gt;&lt;span class="pcard-tech"&gt;逆向工程&lt;/span&gt;&lt;span class="pcard-tech"&gt;DEFLATE&lt;/span&gt;&lt;span class="pcard-tech"&gt;TI-Nspire&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/zehn/" target="_blank" rel="noopener"&gt;看报告 ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;实验&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🧮&lt;/span&gt;TI-Nspire 在线模拟器&lt;/h3&gt;&#13;&#10; &lt;p&gt;把 Firebird 模拟器编译成 WebAssembly，在浏览器里跑真实的 TI-Nspire OS + Ndless。三种机型（经典 Touchpad / CX II / Windows 95）、虚拟 USB 文件传输与整文件夹上传、nPal 一键启动，以及用户名登录 + 服务器存档的长期使用模式。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;WebAssembly&lt;/span&gt;&lt;span class="pcard-tech"&gt;Emscripten&lt;/span&gt;&lt;span class="pcard-tech"&gt;C++&lt;/span&gt;&lt;span class="pcard-tech"&gt;逆向工程&lt;/span&gt;&lt;span class="pcard-tech"&gt;Ndless&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/nspire/" target="_blank" rel="noopener"&gt;在线访问 ↗&lt;/a&gt;&lt;a href="https://cloudlake.eu.org/nspire/lt/index.html" target="_blank" rel="noopener"&gt;长期使用 ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;实验&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;⚙️&lt;/span&gt;Factorio Lab&lt;/h3&gt;&#13;&#10; &lt;p&gt;把《异星工厂》的蓝图字符串变成能看、能算、能验证的东西。615 张蓝图、334,856 个实体塞进一个 6 MB 的单文件查看器，再配一个能算出净产出与传送带饱和的计算内核。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;Python&lt;/span&gt;&lt;span class="pcard-tech"&gt;Canvas&lt;/span&gt;&lt;span class="pcard-tech"&gt;zlib/Base64&lt;/span&gt;&lt;span class="pcard-tech"&gt;受限 Lua 求值器&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/factorio/" target="_blank" rel="noopener"&gt;在线玩 ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;实验&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🔩&lt;/span&gt;Kiln&lt;/h3&gt;&#13;&#10; &lt;p&gt;装不上 nasm 和 qemu，于是从零实现 16 位 x86 汇编器、模拟器和独立反汇编器。62 项断言互校，抓出 12 个真实缺陷，最终输出一个 512 字节的 Mandelbrot 引导扇区。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;Python&lt;/span&gt;&lt;span class="pcard-tech"&gt;x86&lt;/span&gt;&lt;span class="pcard-tech"&gt;汇编器&lt;/span&gt;&lt;span class="pcard-tech"&gt;模拟器&lt;/span&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;实验&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🧵&lt;/span&gt;Loom&lt;/h3&gt;&#13;&#10; &lt;p&gt;一门 17 个词的绘图语言，图灵完备、静态可检查。后缀式栈机 + 前向数据流分析，七行代码画出三瓣玫瑰。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;JavaScript&lt;/span&gt;&lt;span class="pcard-tech"&gt;Canvas&lt;/span&gt;&lt;span class="pcard-tech"&gt;语言设计&lt;/span&gt;&lt;span class="pcard-tech"&gt;静态分析&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/loom/" target="_blank" rel="noopener"&gt;在线玩 ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;实验&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🧬&lt;/span&gt;Primordium&lt;/h3&gt;&#13;&#10; &lt;p&gt;三条规则的人工生命沙盒。参数扫描扫出两个反直觉结论：摩擦越大体系反而越活；持续活动来自力的不对称，而不是能量的注入。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;JavaScript&lt;/span&gt;&lt;span class="pcard-tech"&gt;Canvas&lt;/span&gt;&lt;span class="pcard-tech"&gt;参数扫描&lt;/span&gt;&lt;span class="pcard-tech"&gt;涌现&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/primordium/" target="_blank" rel="noopener"&gt;在线玩 ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;XR 应用&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🔢&lt;/span&gt;BinaryPathway&lt;/h3&gt;&#13;&#10; &lt;p&gt;面向 Meta Quest 的混合现实解谜游戏。在客厅的空间网格里拖动二进制 0/1 方块，接通一条从起点到终点的完整回路。实时 BFS 连通性判定、XR 插槽吸附，以及三套自动关卡生成算法。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;Unity 6&lt;/span&gt;&lt;span class="pcard-tech"&gt;Meta XR SDK 85&lt;/span&gt;&lt;span class="pcard-tech"&gt;C#&lt;/span&gt;&lt;span class="pcard-tech"&gt;Hand tracking&lt;/span&gt;&lt;span class="pcard-tech"&gt;OpenXR&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://github.com/STCloudLake/BinaryPathway" target="_blank" rel="noopener"&gt;GitHub ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;游戏&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;💠&lt;/span&gt;Sigmar's Garden&lt;/h3&gt;&#13;&#10; &lt;p&gt;对 Zachtronics《Opus Magnum》中隐藏的六边形弹珠接龙的忠实复刻。无依赖的 TypeScript + Canvas 网页应用，包含精确规则引擎、保证可解的棋盘生成器，以及快到可以实时运行的求解器，配套 109 个引擎测试。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;TypeScript&lt;/span&gt;&lt;span class="pcard-tech"&gt;Canvas&lt;/span&gt;&lt;span class="pcard-tech"&gt;esbuild&lt;/span&gt;&lt;span class="pcard-tech"&gt;求解器&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/sigmar/" target="_blank" rel="noopener"&gt;在线玩 ↗&lt;/a&gt;&lt;a href="https://github.com/STCloudLake/opus-magnus-solitaire" target="_blank" rel="noopener"&gt;GitHub ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;游戏&lt;/span&gt;&lt;span class="pcard-year"&gt;2025&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🎴&lt;/span&gt;Shenzhen Solitaire&lt;/h3&gt;&#13;&#10; &lt;p&gt;复刻《SHENZHEN I/O》中隐藏的麻将接龙。同一套规则引擎同时产出零依赖单文件网页版与 Electron 桌面版，规则、牌面、配色与牌桌布局均按原版还原。站内版本附带完整 11 首原声，可切曲、可循环。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;JavaScript&lt;/span&gt;&lt;span class="pcard-tech"&gt;Electron&lt;/span&gt;&lt;span class="pcard-tech"&gt;Canvas&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://cloudlake.eu.org/lab/shenzhen/" target="_blank" rel="noopener"&gt;在线玩 ↗&lt;/a&gt;&lt;a href="https://github.com/STCloudLake/shenzhen-solitaire" target="_blank" rel="noopener"&gt;GitHub ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;研究&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🌐&lt;/span&gt;Real-Time Generative 3D in XR&lt;/h3&gt;&#13;&#10; &lt;p&gt;端到端的生成式三维管线：在 Quest 3 头显中拍下一张照片，经 Hunyuan3D 生成带纹理的 3D 模型，再实时放回头显空间。通过异步 GPU 回读完成透视相机的 ROI 抓取，并以 IEEE 格式论文记录全过程。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;Unity 6&lt;/span&gt;&lt;span class="pcard-tech"&gt;OpenXR&lt;/span&gt;&lt;span class="pcard-tech"&gt;ComfyUI&lt;/span&gt;&lt;span class="pcard-tech"&gt;Python/Flask&lt;/span&gt;&lt;span class="pcard-tech"&gt;Hunyuan3D&lt;/span&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;系统&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;📈&lt;/span&gt;Binance-Trader&lt;/h3&gt;&#13;&#10; &lt;p&gt;面向币安现货的量化研究与交易系统。数据管道落盘 parquet 并检查缺口，回测引擎按手续费、价差与滑点建模，遗传搜索演化策略，ML 与 GA 各有一套可信度门。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;Python&lt;/span&gt;&lt;span class="pcard-tech"&gt;FastAPI&lt;/span&gt;&lt;span class="pcard-tech"&gt;pandas&lt;/span&gt;&lt;span class="pcard-tech"&gt;LightGBM&lt;/span&gt;&lt;span class="pcard-tech"&gt;PyTorch&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://github.com/STCloudLake/Binance-Trader" target="_blank" rel="noopener"&gt;GitHub ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;工具&lt;/span&gt;&lt;span class="pcard-year"&gt;2025&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🛡️&lt;/span&gt;Cloudflare Tunnel Manager&lt;/h3&gt;&#13;&#10; &lt;p&gt;Windows 系统托盘工具，用于图形化管理 Cloudflare Tunnel：增删端口映射、一键启停、绑定 DNS 路由、实时查看运行日志。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;Python&lt;/span&gt;&lt;span class="pcard-tech"&gt;cloudflared&lt;/span&gt;&lt;span class="pcard-tech"&gt;WinForms&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://github.com/STCloudLake/cloudflare-tunnel-manager" target="_blank" rel="noopener"&gt;GitHub ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;工具&lt;/span&gt;&lt;span class="pcard-year"&gt;2026&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;🔌&lt;/span&gt;MCPs&lt;/h3&gt;&#13;&#10; &lt;p&gt;围绕 Model Context Protocol 的一组服务与工具，用于把本地能力接进 AI 代理的调用链。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;Python&lt;/span&gt;&lt;span class="pcard-tech"&gt;MCP&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://github.com/STCloudLake/MCPs" target="_blank" rel="noopener"&gt;GitHub ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;article class="pcard"&gt;&#13;&#10; &lt;div class="pcard-top"&gt;&lt;span class="pcard-cat"&gt;其他&lt;/span&gt;&lt;span class="pcard-year"&gt;2021&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;h3&gt;&lt;span class="pcard-icon"&gt;💬&lt;/span&gt;卓音工作室论坛&lt;/h3&gt;&#13;&#10; &lt;p&gt;东北师范大学卓音工作室的社区论坛，始建于 2021 年 10 月。&lt;/p&gt;&#13;&#10; &lt;div class="pcard-techs"&gt;&lt;span class="pcard-tech"&gt;Web&lt;/span&gt;&lt;span class="pcard-tech"&gt;社区&lt;/span&gt;&lt;/div&gt;&#13;&#10; &lt;div class="pcard-links"&gt;&lt;a href="https://github.com/STCloudLake/forum" target="_blank" rel="noopener"&gt;GitHub ↗&lt;/a&gt;&lt;/div&gt;&#13;&#10;&lt;/article&gt;&#13;&#10;&lt;/div&gt;&#13;&#10;</description></item><item><title>归档</title><link>https://cloudlake.eu.org/archives/</link><pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate><guid>https://cloudlake.eu.org/archives/</guid><description/></item><item><title>搜索</title><link>https://cloudlake.eu.org/search/</link><pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate><guid>https://cloudlake.eu.org/search/</guid><description/></item></channel></rss>