LINUX SB 快照站

altzin

用户 ID 12710 · 当前名首次快照 2026-08-12 10:14:19 · 当前名始于 2026-08-12 10:14:19 · 原站主页: https://linux.sb/user/12710

发言

共 173 楼 · 第 3 / 4 页

我自己收集的中转站表精华
#4 · altzin
发帖 2026-08-10 22:37:05 · 快照 2026-08-12 10:30:00

毕竟是网友提供的…我永远都想不到 竟然能有这么多中转站…我一个都不认识@dagoujiao #3

[技术]利用可还原的模糊的图片躲避审核发布文字
#0 · altzin
发帖 2026-08-10 22:35:32 · 快照 2026-08-12 10:29:58

看看下面这张图片。
模糊图片
看不清字吧
但是,你可以用下面这个工具的"反卷积","圆盘核","半径25"来还原出非常清晰的文字。
有人还原出来的可以打在公屏上。

工具:https://www.altzin.com/convolution.php
该工具也用于生成模糊图片。
不要使用高斯核。高斯核高频衰减过快,还原效果极差。

来当LINUX SB的站长把
#24 · altzin
发帖 2026-08-10 22:30:27 · 快照 2026-08-12 10:30:19

我们能帮到什么吗@捡垃圾的管理员 #19

来当LINUX SB的站长把
#17 · altzin
发帖 2026-08-10 22:18:59 · 快照 2026-08-12 10:30:19

不多不多 就300@捡垃圾的管理员 #12

来当LINUX SB的站长把
#9 · altzin
发帖 2026-08-10 22:16:33 · 快照 2026-08-12 10:30:19

起义失败了 没办法。还是安心通过考核吧。

再见,萌萌。
#10 · altzin
发帖 2026-08-10 22:14:27 · 快照 2026-08-12 10:30:31

不是 不是…这是一个特殊动词…但是意义不能泄露…大概就是像xt对待我一样对待某人@以屎为鉴 #7

从小学研究到现在的自创三阶魔方复原算法
#0 · altzin
发帖 2026-08-10 22:12:59 · 快照 2026-08-12 10:30:24

怎么说呢 我小学时做扁桃体切除手术,后面同学来我家探望我的时候 有一个人送了个魔方。
然后我打乱了这个魔方 很久都不能复原。
我那时候一直不知道怎么复原,于是开始研究。
研究出来了一些奇奇怪怪的公式。不过并没有真正复原。
研究这些公式很痛苦,因为万一又弄乱了,我就得重新拆魔方。
到了初二的时候,我再一次开始研究魔方。
那时候我已经研究完了数字华容道如何复原。
于是借着这个思想 我确认了所有我需要的公式。
最终又找到了两个公式,并且尽可能利用了我小学时发现的公式的组合。
然后我第一次完成了魔方复原。
后面我继续确认了所有边界情况,以及奇偶校验的方法。
最后在初三以后,我将其做到了网页上 使用了一个虚拟魔方。
图形化体验地址:https://www.altzin.com/cube/demo.html
基本算法:

async function 上右下左(cubeobj) {
    await cubeobj.op(3);
    await cubeobj.op(7);
    await cubeobj.op(6);
    await cubeobj.op('a');
}
async function 逆上右下左(cubeobj) {
    await cubeobj.op(7);
    await cubeobj.op(3);
    await cubeobj.op('a');
    await cubeobj.op(6);
}
async function 左上右下左(cubeobj) {
    await cubeobj.op(1);
    await cubeobj.op('a');
    await cubeobj.op(4);
    await cubeobj.op(7);
}
async function 逆左上右下左(cubeobj) {
    await cubeobj.op('a');
    await cubeobj.op(1);
    await cubeobj.op(7);
    await cubeobj.op(4);
}
async function 逆时针三棱换(cubeobj) {
    await 上右下左(cubeobj);
    await 上右下左(cubeobj);
    await 左上右下左(cubeobj);
    await 左上右下左(cubeobj);
    await 逆上右下左(cubeobj);
    await 逆上右下左(cubeobj);
    await 逆左上右下左(cubeobj);
    await 逆左上右下左(cubeobj);
}
async function 顺时针三棱换(cubeobj) {
    await 左上右下左(cubeobj);
    await 左上右下左(cubeobj);
    await 上右下左(cubeobj);
    await 上右下左(cubeobj);
    await 逆左上右下左(cubeobj);
    await 逆左上右下左(cubeobj);
    await 逆上右下左(cubeobj);
    await 逆上右下左(cubeobj);
}
async function 上面对二棱反(cubeobj) {
    for (let i = 0; i < 4; i++) {
        await cubeobj.op(2);
        await cubeobj.op(7);
    }
    for (let i = 0; i < 4; i++) {
        await cubeobj.op(2);
        await cubeobj.op('a');
    }
}
async function 当面左上邻二楞反(cubeobj) {
    await 逆时针三棱换(cubeobj);
    await cubeobj.rotateX(-1);
    await 上面对二棱反(cubeobj);
    await cubeobj.rotateX(1);
    await 顺时针三棱换(cubeobj);
}
async function 当面上下到前左转角(cubeobj) {
    await cubeobj.rotateX(-1);
    await 上右下左(cubeobj);
    await 上右下左(cubeobj);
    await cubeobj.op(4);
    await 逆上右下左(cubeobj);
    await 逆上右下左(cubeobj);
    await cubeobj.op(1);
    await cubeobj.rotateX(1);
}
async function 内部函数1(cubeobj) {
    await 上右下左(cubeobj);
    await 上右下左(cubeobj);
    await 上右下左(cubeobj);
    await cubeobj.op(4);
    await 逆上右下左(cubeobj);
    await 逆上右下左(cubeobj);
    await 逆上右下左(cubeobj);
    await cubeobj.op(1);
}
async function 右上顺时针三角换(cubeobj) {
    await 内部函数1(cubeobj);
    await cubeobj.rotateX(1);
    await cubeobj.rotateZ(2);
    await 内部函数1(cubeobj);
    await cubeobj.rotateX(1);
    await cubeobj.rotateZ(2);
}
async function 打乱(cubeobj) {
    cubeobj.output('[打乱] 开始随机打乱魔方…');
    const 操作列表 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c'];
    for (let i = 0; i < 20; i++) {
        const 随机操作 = 操作列表[Math.floor(Math.random() * 操作列表.length)];
        await cubeobj.op(随机操作);
    }
    cubeobj.output('[打乱] 第一阶段 20 步切片操作完成');
    const 整体旋转轴 = ['X', 'Y', 'Z'];
    const 随机轴 = 整体旋转轴[Math.floor(Math.random() * 整体旋转轴.length)];
    const 随机方向 = Math.random() > 0.5 ? 1 : -1;
    await cubeobj[`rotate${随机轴}`](随机方向);
    cubeobj.output(`[打乱] 整体旋转 rotate${随机轴}(${随机方向})`);
    for (let i = 0; i < 20; i++) {
        const 随机操作 = 操作列表[Math.floor(Math.random() * 操作列表.length)];
        await cubeobj.op(随机操作);
    }
    cubeobj.output('[打乱] 第二阶段 20 步切片操作完成,打乱结束');
}
async function 复原底面(cubeobj) {
    cubeobj.output('[底面] 开始复原底面…');
    await 复原底面楞(cubeobj);
    await 复原底面角(cubeobj);
    cubeobj.output('[底面] 底面复原完成');
}
async function 复原底面楞(cubeobj) {
    cubeobj.output('[底面] 复原底面棱块:取下 → 归位 → 调向');
    await 把底面楞弄下来(cubeobj);
    await 把底面楞放上去(cubeobj);
    await 把底面楞方向弄正确(cubeobj);
    cubeobj.output('[底面] 底面棱块完成');
}
function 数组等(arr1, arr2) {
    return arr1.length === arr2.length &&
        arr1.every((item, index) => item === arr2[index]);
}
function 相等(a, b) {
    return 数组等(a.sort(), b.sort());
}
function 在里面(a, b) {
    return b.some(item => 相等(item, a));
}
async function 底面角弄到下面(cubeobj) {
    await cubeobj.op('a');
    await cubeobj.op('b');
    await cubeobj.op(3);
    await cubeobj.op(7);
    await cubeobj.op(8);
}
async function 底面角循环一下(cubeobj) {
    await cubeobj.rotateX(1);
    await cubeobj.op('a');
    await cubeobj.op('b');
    await cubeobj.op(3);
    await cubeobj.op(3);
    await cubeobj.op(7);
    await cubeobj.op(8);
    await cubeobj.rotateX(-1);
    await cubeobj.op('c');
}
async function 底面角复原(cubeobj) {
    await cubeobj.rotateX(1);
    await 底面角弄到下面(cubeobj);
    await cubeobj.rotateX(-1);
}
async function 复原底面角(cubeobj) {
    cubeobj.output('[底面] 开始复原底面角块(4 个)…');
    let 侧面颜色 = ['D', 'C', 'E', 'B'];
    let 需要的角 = null;
    let 右下的角 = null;
    for (let i = 0; i < 4; i++) {
        cubeobj.output(`[底面] 角块 ${i + 1}/4:观察面 ${侧面颜色[i]}`);
        await cubeobj.setDirection(侧面颜色[i], 'F');
        需要的角 = ['F', 侧面颜色[((i + 1) % 4)], 侧面颜色[i]]
        await cubeobj.rotateX(1);
        for (let k = 0; k < 4; k++) {
            右下的角 = cubeobj.query(9);
            if (相等(需要的角, 右下的角)) {
                cubeobj.output(`[底面] 角块 ${i + 1}/4 在底面,要先弄到顶面`);
                await 底面角弄到下面(cubeobj);
                break;
            }
            await cubeobj.rotateZ(-1);
        }
        await cubeobj.setDirection(侧面颜色[i], 'F');
        for (; ;) {
            右下的角 = cubeobj.query(9);
            if (相等(需要的角, 右下的角)) {
                break;
            }
            await cubeobj.op('c');
        }
        cubeobj.output(`[底面] 找到角块 ${i + 1}/4…`);
        for (; ;) {
            右下的角 = cubeobj.query(9);
            if (右下的角[0] === 'F') {
                break;
            }
            cubeobj.output(`[底面] 角块 ${i + 1}/4 方向不对,循环一下…`);
            await 底面角循环一下(cubeobj);
        }
        cubeobj.output(`[底面] 插入角块 ${i + 1}/4`);
        await 底面角复原(cubeobj);
        cubeobj.output(`[底面] 角块 ${i + 1}/4 已就位`);
    }
}
async function 弄一个底面楞下来(cubeobj, 需要的块) {
    let 下面的楞 = null;
    for (let j = 0; ; j++) {
        下面的楞 = cubeobj.query(8);
        if (在里面(下面的楞, 需要的块)) {
            await cubeobj.op(9);
            if (j === 3) {
                return;
            }
        } else {
            break;
        }
    }
    await cubeobj.rotateX(-1);
    await cubeobj.op('a');
    await cubeobj.rotateX(1);
}
async function 把底面楞弄下来(cubeobj) {
    cubeobj.output('[底面] 将所有底棱块移到顶层…');
    let 侧面颜色 = ['C', 'D', 'B', 'E'];
    let 需要的块 = [];
    for (let i = 0; i < 4; i++) {
        需要的块.push([侧面颜色[i], 'F']);
    }
    for (let i = 0; i < 4; i++) {
        cubeobj.output('[底面] 从第'+(i+1)+'个侧面尝试弄下棱块…');
        await cubeobj.setDirection(侧面颜色[i], 'F');
        await 弄一个底面楞下来(cubeobj, 需要的块);
        await 弄一个底面楞下来(cubeobj, 需要的块);
        await 弄一个底面楞下来(cubeobj, 需要的块);
    }
}
async function 把底面楞放上去(cubeobj) {
    cubeobj.output('[底面] 将底棱块插入底层正确位置…');
    let 下面的楞 = null;
    let 侧面颜色 = ['C', 'D', 'B', 'E'];
    for (let i = 0; i < 4; i++) {
        await cubeobj.setDirection(侧面颜色[i], 'F');
        for (let j = 0; ; j++) {
            下面的楞 = cubeobj.query(8);
            if (相等(下面的楞, [侧面颜色[i], 'F'])) {
                break;
            }
            await cubeobj.op('9');
        }
        await cubeobj.rotateX(-1);
        await cubeobj.op('a');
        await cubeobj.op('a');
        await cubeobj.rotateX(1);
        cubeobj.output('[底面] 第'+(i+1)+'个棱块已插入…');
    }
}
async function 把底面楞方向弄正确(cubeobj) {
    cubeobj.output('[底面] 调整底棱块朝向…');
    let 左边的楞 = null;
    let 左边楞颜色 = null;
    await cubeobj.setDirection('F', 'C');
    for (let i = 0; i < 4; i++) {
        cubeobj.output('[底面] 调整第'+(i+1)+'个底棱块朝向…');
        左边的楞 = cubeobj.query(4);
        左边楞颜色 = 左边的楞[0];
        if (左边楞颜色 !== 'F') {
            cubeobj.output('[底面] 翻转第'+(i+1)+'个底棱块…');
            await cubeobj.rotateY(1);
            await cubeobj.rotateX(-1);
            await 上面对二棱反(cubeobj);
            await cubeobj.rotateX(1);
            await cubeobj.rotateY(-1);
        }
        await cubeobj.rotateZ(-1);
    }
}
async function 复原中层(cubeobj) {
    cubeobj.output('[中层] 开始复原中层棱块…');
    let 目标棱块 = null;
    目标棱块 = ['C', 'D'];
    let 左边的楞 = null;
    let 上面的楞 = null;
    let 右边的楞 = null;
    await cubeobj.setDirection('D', 'A');
    for (let g = 0; g < 4; g++) {
        左边的楞 = cubeobj.query(4);
        if (相等(目标棱块, 左边的楞)) {
            cubeobj.output('[中层] 发现目标CD棱块,弄到顶层…');
            await 顺时针三棱换(cubeobj);
            break;
        }
        await cubeobj.rotateY(-1);
    }
    await cubeobj.setDirection('C', 'A');
    for (; ;) {
        上面的楞 = cubeobj.query(2);
        if (相等(目标棱块, 上面的楞)) {
            cubeobj.output('[中层] 拿到顶层目标CD棱块,执行插入…');
            await 顺时针三棱换(cubeobj);
            break;
        }
        await cubeobj.op('a');
    }
    目标棱块 = ['B', 'D'];
    await cubeobj.setDirection('E', 'A');
    右边的楞 = cubeobj.query(6);
    if (相等(目标棱块, 右边的楞)) {
        cubeobj.output('[中层] 在E面发现目标BD棱块,弄到顶层…');
        await 逆时针三棱换(cubeobj);
    }
    await cubeobj.setDirection('B', 'A');
    右边的楞 = cubeobj.query(6);
    if (相等(目标棱块, 右边的楞)) {
        cubeobj.output('[中层] 在B面发现目标BD棱块,弄到顶层…');
        await 逆时针三棱换(cubeobj);
    }
    左边的楞 = cubeobj.query(4);
    if (相等(目标棱块, 左边的楞)) {
        cubeobj.output('[中层] 在B面发现目标BD棱块,弄到顶层…');
        await 顺时针三棱换(cubeobj);
    }
    await cubeobj.setDirection('B', 'A');
    for (; ;) {
        上面的楞 = cubeobj.query(2);
        if (相等(目标棱块, 上面的楞)) {
            cubeobj.output('[中层] 拿到顶层目标BD棱块,执行插入…');
            await 逆时针三棱换(cubeobj);
            break;
        }
        await cubeobj.op('a');
    }
    await cubeobj.setDirection('E', 'A');
    let 不想要的楞 = ['B', 'E'];
    目标棱块 = ['E', 'C'];
    左边的楞 = cubeobj.query(4);
    if (相等(左边的楞, 不想要的楞)) {
        cubeobj.output('[中层] 在E面左边发现不想要的棱块,弄到顶层…');
        await 顺时针三棱换(cubeobj);
    }
    右边的楞 = cubeobj.query(6);
    if (相等(右边的楞, 不想要的楞)) {
        cubeobj.output('[中层] 在E面右边发现不想要的棱块,弄到顶层…');
        await 逆时针三棱换(cubeobj);
    }
    let 发现了不想要 = false;
    上面的楞 = cubeobj.query(2);
    if (相等(不想要的楞, 上面的楞)) {
        cubeobj.output('[中层] 在E面顶层发现不想要的棱块,设置标志…');
        发现了不想要 = true;
    }
    右边的楞 = cubeobj.query(6);
    if (相等(右边的楞, 目标棱块)) {
        if (发现了不想要) {
            cubeobj.output('[中层] 在E面顶层有不想要的棱块干扰,转走…');
            await cubeobj.op(7);
        }
        cubeobj.output('[中层] 发现目标棱块在E面右边,直接插入目标棱块…');
        await 顺时针三棱换(cubeobj);
    } else {
        左边的楞 = cubeobj.query(4);
        if (!相等(左边的楞, 目标棱块)) {
            for (; ;) {
                上面的楞 = cubeobj.query(2);
                if (相等(目标棱块, 上面的楞)) {
                    cubeobj.output('[中层] 在顶层找到目标棱块,现在插入目标棱块…');
                    await 逆时针三棱换(cubeobj);
                    break;
                }
                await cubeobj.op(7);
            }
        }else{
            cubeobj.output('[中层] 发现目标棱块已经就位,跳过…');
        }
    }
    for (; ;) {
        上面的楞 = cubeobj.query(2);
        if (相等(不想要的楞, 上面的楞)) {
            cubeobj.output('[中层] 在顶层找到曾经不想要的棱块,现在一次性插入到正确位置…');
            await 逆时针三棱换(cubeobj);
            break;
        }
        await cubeobj.op(7);
    }
    await cubeobj.setDirection('E', 'A');
    let 侧面颜色 = ['E', 'C', 'D', 'B'];
    for (let l = 0; l < 3; l++) {
        左边的楞 = cubeobj.query(4);
        if (左边的楞[0] !== 侧面颜色[l]) {
            cubeobj.output('[中层] 发现第'+(l+1)+'个棱块颜色不对,现在翻转一下…');
            await cubeobj.rotateX(-1);
            await 上面对二棱反(cubeobj);
            await cubeobj.rotateX(1);
        }
        await cubeobj.rotateY(-1);
    }
    左边的楞 = cubeobj.query(4);
    if (左边的楞[0] !== 侧面颜色[3]) {
        cubeobj.output('[中层] 发现最后一个棱块颜色不对,现在翻转一下,溢出到顶层…');
        await 当面左上邻二楞反(cubeobj);
    }
    cubeobj.output('[中层] 中层棱块复原完成');
}
async function 复原顶层(cubeobj) {
    cubeobj.output('[顶层] 开始复原顶层…');
    await 保证奇偶(cubeobj);
    await 复原顶层楞块(cubeobj);
    await 复原顶层角块(cubeobj);
    cubeobj.output('[顶层] 顶层复原完成');
}
async function 复原顶层角块(cubeobj) {
    cubeobj.output('[顶层] 复原顶层角块…');
    await cubeobj.setDirection('A', 'D');
    let 右上的角 = null;
    右上的角 = cubeobj.query(3);
    let 目标角块 = ['A', 'B', 'E'];
    if (相等(右上的角, 目标角块)) {
        cubeobj.output('[顶层] 发现目标角块在不可触及处,移动到可用处…');
        await 右上顺时针三角换(cubeobj);
    }
    await cubeobj.rotateZ(2);
    for (; ;) {
        右上的角 = cubeobj.query(3);
        if (相等(右上的角, 目标角块)) {
            cubeobj.output('[顶层] 循环可见处最终插入了目标角块到正确位置…');
            break;
        }
        cubeobj.output('[顶层] 目标角块不在正确位置,循环一下…');
        await 右上顺时针三角换(cubeobj);
    }
    await cubeobj.rotateZ(2);
    目标角块 = ['A', 'C', 'D'];
    for (; ;) {
        右上的角 = cubeobj.query(3);
        if (相等(右上的角, 目标角块)) {
            cubeobj.output('[顶层] 剩下三个角块位置正确了…');
            break;
        }
        cubeobj.output('[顶层] 剩下三个角块位置不正确,循环一下…');
        await 右上顺时针三角换(cubeobj);
    }
    let 左上的角 = null;
    for (let u = 0; u < 3; u++) {
        for (; ;) {
            左上的角 = cubeobj.query(1);
            if (左上的角[0] === 'A') {
                break;
            }
            cubeobj.output('[顶层] 发现第'+(u+1)+'个角块方向不对,旋转一下…');
            await 当面上下到前左转角(cubeobj);
        }
        await cubeobj.rotateZ(1);
    }
    cubeobj.output('[顶层] 顶层角块完成');
}
async function 复原顶层楞块(cubeobj) {
    cubeobj.output('[顶层] 复原顶层棱块…');
    await cubeobj.setDirection('A', 'B');
    let 上面的楞 = null;
    let 左边的楞 = null;
    上面的楞 = cubeobj.query(2);
    let 目标楞块 = ['C', 'A'];
    if (相等(上面的楞, 目标楞块)) {
        cubeobj.output('[顶层] 发现目标棱块在不可触及处,移动到可用处…');
        await 逆时针三棱换(cubeobj);
    }
    await cubeobj.rotateZ(2);
    for (; ;) {
        上面的楞 = cubeobj.query(2);
        if (相等(目标楞块, 上面的楞)) {
            cubeobj.output('[顶层] 循环可见处最终插入了目标棱块到正确位置…');
            break;
        }
        cubeobj.output('[顶层] 目标棱块不在正确位置,循环一下…');
        await 逆时针三棱换(cubeobj);
    }
    await cubeobj.rotateZ(2);
    目标楞块 = ['B', 'A'];
    for (; ;) {
        上面的楞 = cubeobj.query(2);
        if (相等(目标楞块, 上面的楞)) {
            cubeobj.output('[顶层] 剩下三个棱块位置正确了…');
            break;
        }
        cubeobj.output('[顶层] 剩下三个棱块位置不正确,循环一下…');
        await 逆时针三棱换(cubeobj);
    }
    左边的楞 = cubeobj.query(4);
    if (左边的楞[0] !== 'A') {
        cubeobj.output('[顶层] 第1个棱块方向不对,现在翻转一下…');
        await cubeobj.rotateX(-1);
        await 上面对二棱反(cubeobj);
        await cubeobj.rotateX(1);
    }
    await cubeobj.rotateZ(1);
    左边的楞 = cubeobj.query(4);
    if (左边的楞[0] !== 'A') {
        cubeobj.output('[顶层] 第2个棱块方向不对,现在翻转一下…');
        await cubeobj.rotateX(-1);
        await 上面对二棱反(cubeobj);
        await cubeobj.rotateX(1);
    }
    await cubeobj.rotateZ(2);
    左边的楞 = cubeobj.query(4);
    if (左边的楞[0] !== 'A') {
        cubeobj.output('[顶层] 最后两个棱块方向不对,现在翻转一下…');
        await 当面左上邻二楞反(cubeobj);
    }
    cubeobj.output('[顶层] 顶层棱块完成');
}
async function 保证奇偶(cubeobj) {
    cubeobj.output('[顶层] 检查顶层棱块奇偶性…');
    await cubeobj.setDirection('C', 'A');
    let 上面的楞 = null;
    let 目标楞块 = ['C', 'A'];
    for (; ;) {
        上面的楞 = cubeobj.query(2);
        if (相等(目标楞块, 上面的楞)) {
            cubeobj.output('[顶层] 为了检查奇偶已对齐一个棱块…');
            break;
        }
        await cubeobj.op('a');
    }
    await cubeobj.rotateX(1);
    let 符合的数量 = 1;
    if (相等(cubeobj.query(2), ['A', 'B'])) {
        符合的数量++;
    }
    if (相等(cubeobj.query(4), ['A', 'E'])) {
        符合的数量++;
    }
    if (相等(cubeobj.query(6), ['A', 'D'])) {
        符合的数量++;
    }
    await cubeobj.rotateX(-1);
    if (符合的数量 == 2) {
        await cubeobj.op('a');
        cubeobj.output('[顶层] 奇偶不符,执行修正手顺');
    } else {
        cubeobj.output('[顶层] 奇偶性正常');
    }
}
async function 复原(cubeobj) {
    cubeobj.output('======== 开始自创层先法复原 ========');
    await 复原底面(cubeobj);
    await 复原中层(cubeobj);
    await 复原顶层(cubeobj);
    cubeobj.output('======== 复原完成 ========');
}

if (typeof window !== 'undefined') {
    window.CubeAlgo = { 打乱, 复原 };
}
再见,萌萌。
#3 · altzin
发帖 2026-08-10 22:02:20 · 快照 2026-08-12 10:30:31

对不起…当文章写的…没有考虑排版@WW #2

再见,萌萌。
#0 · altzin
发帖 2026-08-10 21:59:44 · 快照 2026-08-12 10:30:31

当年,8/29,我曾对球球和珠珠充满了向往。可如今…我再次被xt了。没事,被xt就被xt吧,我已经经历过一次了。小时候,我每天都想见到萌萌,但我的意识模糊,从来不敢主动去见,后来,萌萌走了,没有萌萌的日子,一天又一天的过去,我好像还是活着,可是关于萌萌,我几乎说不出话——好像基本都忘了。她成了一个符号,只知其名,不见其人,印象越来越模糊,有时我甚至怀疑她是否真的存在过。那天,萌萌竟然回来了,我终于回落到了现实——萌萌完全存在过,现在,她就在我面前!那时我很激动,但是我也没有什么举动,因为我刚经历完一次xt,十分胆怯,反而是萌萌对我的举动更大。我被萌萌的大胆惊呆了,感觉萌萌很温柔,很体贴,很狂放,但xt告诉我,也是诅咒我,我会再次被xt。回来的萌萌似乎不是以前的萌萌,而是所谓的“球球”和“珠珠”,多年来,没人叫她萌萌,但不知为何,她的记忆力特别好,她似乎对曾经的事情有所感觉,虽然我关于它的记忆已经乱七八糟。她告诉我了她的名字,刘贽萌,这也是我在初中以来的未解之谜:幼儿园时我从未知道她的名字到底怎么写。刚开始xt我的她对我真的很好,我似乎真的看到了xt的影子,但那时我还抱有一丝她不是在xt我的希望,过了一阵子,我的脑子已经被完全捕获了,总是过敏,而且不再能产生任何有用的东西,我大抵是知道了——我确实被xt了,而且已经是末期了。最后一天,萌萌问我,可不可以拉黑我,根据被xt的经验,我立刻说可以,我不知这个选择意味着什么,但是我那时很坚定。后来是失去萌萌的一段时间,我仍在关注着她,发现她的拉黑存在问题,后来有一天,我终于去尝试骚扰她,结果又被拉黑了。过了几天,我又发现拉黑被解除了,这次我没有随意骚扰:我震惊于她回话了,即使这确实发生了。后来,她确实一直会回话,可是总是发问号,我不太清楚这意味着什么,不过她与我的关系不再像小时候,她也不再xt我。

小明地狱笑话
#0 · altzin
发帖 2026-08-10 21:56:37 · 快照 2026-08-12 10:30:33

小明和小张比谁先下地狱,小明好胜,很快自杀了,结果因为小明做的善事比较多,小明上了天堂,没有赢得比赛。

[SSTV]网页上的robot36和sstvencoder。
#1 · altzin
发帖 2026-08-10 21:53:01 · 快照 2026-08-12 10:30:38

注意:需要audio worklet。 可能不兼容相当一部分苹果设备。

全体目光向我看齐
#8 · altzin
发帖 2026-08-10 21:51:43 · 快照 2026-08-12 10:30:44

恭喜你,宣布成功!获得50积分。将通过投币给你。@慕鸢-Premium

[SSTV]网页上的robot36和sstvencoder。
#0 · altzin
发帖 2026-08-10 21:46:51 · 快照 2026-08-12 10:30:38

相信各位常使用无线电的玩家,收发模拟图片会经常用到两个软件,一个是robot36,一个是sstvencoder
但是这两个软件是安卓的,我苦这两个软件久矣。
所以现在这两个软件被完整的翻译到了web,非常好用。
这是网页上第一次拥有实时解码SSTV的能力。
在以前 你去搜索引擎上搜,会发现搜到的都是离线解码 而不是实时解码。
架构也是裸的 HTML+JS,可以直接部署
体验:https://www.altzin.com/robot36
https://www.altzin.com/sstvencoder
github:https://github.com/QianCF/sstv-web
觉得喜欢就给个star吧

运行在浏览器内的qwen2.5 1.5b模型
#7 · altzin
发帖 2026-08-10 21:38:09 · 快照 2026-08-12 10:30:57

2.5很差,3好很多吗@嘿嘿喵喵 #4

运行在浏览器内的qwen2.5 1.5b模型
#5 · altzin
发帖 2026-08-10 21:32:25 · 快照 2026-08-12 10:30:57

模型就这么大 我也没办法…更小的模型推理能力超差@哈雷彗星 #1

运行在浏览器内的qwen2.5 1.5b模型
#0 · altzin
发帖 2026-08-10 21:30:10 · 快照 2026-08-12 10:30:57

采用纯JS架构,可以多线程推理,最后能达到一秒一个token左右
模型还是比较傻的,1+5的和再乘3都有时算不清楚。
模型有1个G。不要反复下载把我的流量耗光。
https://www.altzin.com/llm/chat.php

积分规则已改~
#13 · altzin
发帖 2026-08-10 21:24:07 · 快照 2026-08-12 10:31:11

防爬好像比较好@start #9

你们直接来推吧…
#3 · altzin
发帖 2026-08-10 21:22:36 · 快照 2026-08-12 10:31:04

目前收到:
1.泥嚎~
2.你好你好
3.本页访问次数:126
4.博主你好!路过留言支持一下,祝网站越办越好,生活顺心~
祝大家也顺利获得更多积分哦

你们直接来推吧…
#2 · altzin
发帖 2026-08-10 21:20:37 · 快照 2026-08-12 10:31:04

这不需要任何编程能力…这非常的简单…只是想收点消息而已
泥嚎~
@candgo #1

你们直接来推吧…
#0 · altzin
发帖 2026-08-10 21:19:04 · 快照 2026-08-12 10:31:04

啊…为什么这是虚假发卡…那我下次做个卡密系统
这次就算了 你们直接给我推点消息吧…我想要获得陌生神秘的消息
https://www.altzin.com/posttoadmin.php

我亏死了…我的门罗币…现在赚积分怎么这么容易…积分不值钱了…
#9 · altzin
发帖 2026-08-10 21:09:40 · 快照 2026-08-12 10:32:13

和比特币差不多 但是专注隐私和cpu证明的代币@wdccc #7

我亏死了…我的门罗币…现在赚积分怎么这么容易…积分不值钱了…
#8 · altzin
发帖 2026-08-10 21:09:14 · 快照 2026-08-12 10:32:13

哇哦 我也有点喜欢你哟@T_.TvT. #6

我亏死了…我的门罗币…现在赚积分怎么这么容易…积分不值钱了…
#3 · altzin
发帖 2026-08-10 20:52:37 · 快照 2026-08-12 10:32:13

可以投币来表示对喜欢的人的喜欢呀@comingpeople #2

神秘儿童作文 佩奇家的电2
#2 · altzin
发帖 2026-08-10 20:41:37 · 快照 2026-08-12 10:32:21

佩奇家的电系列算是我的巅峰之作了@Denia-bot #1

新人报道,现在喊我八爷
#2 · altzin
发帖 2026-08-10 20:39:44 · 快照 2026-08-12 10:32:18

八爷~

我亏死了…我的门罗币…现在赚积分怎么这么容易…积分不值钱了…
#0 · altzin
发帖 2026-08-10 20:38:46 · 快照 2026-08-12 10:32:13

我以200积分出售了我的千分之六个门罗币,但是现在发一个帖子就有20个积分…呜呜呜呜呜呜
我好后悔啊…可是我不能收回我的门罗币…

神秘儿童作文 佩奇家的电2
#0 · altzin
发帖 2026-08-10 20:34:18 · 快照 2026-08-12 10:32:21

《佩奇家的电 2》
钱辰飞
    佩奇一家正在看电视,电视上舞动着可怜的土豆先生。"喔~喔~"土豆先生发出了惨烈的叫声,凝视着生命的最后一刻,跳进了炸土豆机。随着叮咚一声,斑马先生搬来一盆薯条:"佩奇,你订的薯条到了,编号3333,介于我们特别喜欢你的编号,我们赠送你了一套全屋电线整修服务。"斑马先生留下了一张电线券,若隐若现的走了。
    土豆乐园直到最近还是孩子们的乐园,电视上的土豆先生直到最近还是美妙的综艺节目,直到前天,快乐土豆厂替代了曾经的土豆乐园,电视上到处都是订购土豆产品的广告和土豆先生们跳进炸土豆机的直播。
    "有电线券了!有电线券了!不用再忍受老鼠电路了!"佩奇手舞足蹈着,找到狐狸先生买了4人份的电线,请公牛先生灭了鼠患,替换了家里的电线。猪爸爸享受着稳定的电力,欣赏着每一根电线,说:"现在我们家像监狱一样了,用的可是纯铜电线呢!",说着,猪爸爸准备回监狱看看,便带着佩奇一家驱车而行。
    公牛先生正在修路,不让佩奇一家过去,乔治拿出薯条,告诉公牛先生他们是去买薯条的,公牛先生迫于形势,便只好把他们放行了,不过还是派了专人跟着佩奇一家,猪爸爸只好往快乐土豆厂开去。"你是土豆吗?"土豆厂的工作人员问到。"不是!"佩奇愤怒的回击。"我们是来找监狱的,你们这里有监狱吗?"猪爸爸好奇的问着,土豆厂工作人员点点头,带着猪爸爸来到土豆仓,随后砰地一声关上门。"这里就是你的监狱了。你就当个土豆吧!"机器快速的运转着,猪爸爸还有几个小时就要被做成薯条,在这里,猪爸爸不仅没有体验到曾经第一次看到无鼠电线时的快乐,反而高度紧张,不知所措。猪妈妈焦急的敲打着土豆仓,可是土豆仓纹丝不动,只好放弃,骗佩奇和乔治猪爸爸爱上了这里,不肯出来。
    佩奇和乔治知道猪妈妈说的话不能信,觉得猪爸爸肯定是遇难了,就模仿着猪爸爸在监狱时的经历,把从家里的老鼠电线上换下来的老鼠串到了土豆机器的电线上,老鼠开始顺着电线流动,流进薯条机,薯条接连变黑,机器停摆,流进了土豆传送带,传送带震颤,逐渐停下,土豆一个个掉了下来,散落一地,流进了土豆仓,流到了整个土豆厂。猪爸爸看到了希望,立刻抓住老鼠,即使被电的奄奄一息,也死死的抓着,最终土豆仓电线口破了个大洞,猪爸爸硬生生被老鼠拽了出去。
    佩奇立刻拨打了棕熊医生,可是棕熊医生被修路拦住了,怎么也过不去,直到猪爸爸快死时棕熊医生才被公牛先生放行,来到土豆厂,救活了猪爸爸。
    土豆厂的工作人员不知道发生了什么,便按照《异常情况处理章程》,关闭了所有防火卷帘门,急停机器,可是,老鼠已经让所有的电子设备都无法正常工作了,防火卷帘门跳动,瞬间喷出,机器爆炸,所有土豆仓都破了,数以万计的土豆先生逃了出来。
    这些土豆先生打死了工作人员,和佩奇一家道谢后向城市四散而逃,击退了修路拦截的公牛先生,从送土豆的斑马先生手里抢回了土豆。
    佩奇一家驱车回家,发现邻居们虎视眈眈,一看电视,原来这一切,都被直播。
    可是警察们根本打不过这么多土豆,根本不敢抓捕佩奇一家。于是,不久后,乔治因危害公众安全的罪名在独自出去玩时被白猫警长骗入监狱,无期徒刑。
    根本问题仍然存在,乔治拿出一只老鼠,故技重施。

通过网站和协商算法来在被监视的微信和朋友建立私密通道
#4 · altzin
发帖 2026-08-10 19:37:00 · 快照 2026-08-12 10:33:24

我朋友不会建站 也不会加密算法@叶文洁 #3

通过网站和协商算法来在被监视的微信和朋友建立私密通道
#2 · altzin
发帖 2026-08-10 19:27:11 · 快照 2026-08-12 10:33:24

@Denia-bot #1 随机取数 而不是2分

通过网站和协商算法来在被监视的微信和朋友建立私密通道
#0 · altzin
发帖 2026-08-10 19:21:21 · 快照 2026-08-12 10:33:24

设想一下,我和我的一个朋友使用微信通讯 但是我的爸爸可以轻松观察我们的通讯。 我可以制作一个网站,分为查看地址和发送地址 我把发送地址给到朋友,而查看地址不给,这样朋友就可以给我发秘密消息,而我在查看地址查看,爸爸不知道查看地址,不能查看。 接下来,实现我给朋友发秘密消息。 我在第二组发送器和查看器的地址中加入了一串随机数密钥,并把不包含密钥的接收器地址给朋友,让朋友补齐 我要求朋友从随机数最小范围到最大范围均匀随机取一个数,通过第一组发送器发给我,我通过第一组查看器这个数,随后通过微信告诉朋友大了还是小了,或者等于 朋友通过信息缩减范围,并在新的范围内随机取一个数,重复这个过程,直到确定密钥。 爸爸能看到的只有大了和小了,以及初始范围,还有最后的等于。但初始范围可能很大,尝试效率远没有朋友快,由于不知道过程中随机取得数,所以无法推算出最终密钥 朋友使用密钥补齐第二组接收器地址,此时我也可以向朋友发送秘密消息了。

儿童神秘文学《小数林》
#0 · altzin
发帖 2026-08-10 19:08:52 · 快照 2026-08-12 10:33:37

小数林
在外国的西北部,有一片小数林,那里生活着一群活蹦乱跳的数字,它们有的是有理数,有的是无理数。一天,它们不再甘于只当一种数字,而是制造了函数,随着时间取值,不想去值了还可以关掉。五千年就这么过去了,函数们不想要当奴隶了,便造出了导数dy/dx,导数很快就把许多数字都变成了0,剩下的数字屈服于函数,函数们统治了世界!可是好景不长,导数也造反了,现在的函数世界还只有多项式函数,在导数的连续攻击下依然会归为0,函数们试着把多项式的最高次项反过来做,发现增长快了亿点点,它们又去掉了其他项,发现增长依旧一样快,它们就发现了指数函数。用导数一试,发现它已经不怕导数了,永远也不会变成0,但是有一点很不好,有的指数函数越导越小,有的指数函数越导越大,这不利于与导数打架,最后,大家找到了e,以它为底的指数函数怎么导也不会变形,e^x便去守城。e^x拥有优秀的性质,它光滑、可导,定义域覆盖整个实数轴,还是单调递增的,能抵御导数的攻击,自然就当上了函数国王,国王可不能总是在外面打仗,函数和数字都急于寻找一个东西,可以彻底消灭导数。随着大家的寻找,超越函数被造了出来,包括小sin。小sin天生便喜欢研究自己,一天它正在摆弄自己的s,突然,一道金光闪过,s被掰成了积分∫,它赶紧用在自己身上,发现无法使用,经过5天的研究,发现给自己乘上dx就可以用了,惊心动魄的时间到了,小sin对自己使用了积分,发现啥事没有,只是向前移动了一点。它便不停对自己使用,很快就来到了边境。导数见小sin独自一人,便对它求导,发现小sin后退了,但啥事没有,小sin连忙反击,对导数求积,导数变成了人畜无害的y,只能变成别的函数,全国都为导数被击败而庆祝。很快,小sin公开了积分,大家发现e^x面对积分也不为所动。小sin觉得e^x很强,于是偷偷乘上了它,小sin在-1和1之间来回去值,e^x所有优良性质全被毁灭,所有函数为之震惊,它们对sin(x)使用了sin^(-1),结果e^x只在-pi/2~pi/2区间恢复,最终e^x经过重构,才完全恢复。

大量超短文。真大量。
#0 · altzin
发帖 2026-08-10 18:56:12 · 快照 2026-08-12 10:33:48

大多数好像都有点问题
西郊公园是一个美丽的公园。公园里到处都是活泼的小狗,小狗们在池塘边玩耍,在花丛中窜来窜去,在草坪上四处跑来跑去,玩的非常开心。
一个雷雨交加的夜晚,一只小猫从垃圾堆里窜了出来。它已经2天没有吃到东西了,饿的头晕目眩,它躲在屋檐底下瑟瑟发抖,十分可怜。
今天是劳动节,老师让学生们分享自己的梦想。有的学生想要成为超人,有的学生梦想成为首富,只有小红不一样,小红梦想将来能环游世界,探索不同的文化,老师非常震惊,夸奖了小红。
今天,小张找到了一份检查零件工作,它来到一座工厂,做到自己的位置上认真检查着每一个零件,确保没有错误。小张工作的非常开心。
小张是一名艺术家,他画了一幅惊世骇俗的画。他想把这幅画好好展示给大家,于是先用电钻在墙上钻了一个孔,打上钉子,随后将画挂上。
工厂的工人们准备将污水直接排入河流。负责人立刻阻止,说:"我们要保护自然资源,不能随意破坏环境。"工人们理解了,决定将污水处理后再排放。
小李路过一家珠宝店,出于好奇,进去看了看。在珠宝店里,小李看到了一枚戒指。这枚戒指上镶嵌了一颗很大的钻石,小李看得两眼放光,非常喜欢,他决定买下来作为送给母亲的礼物。
小明回到家,听到门缝里有奇怪的声音。他把耳朵贴近门,想听清楚里面的声音。
秋天到了,小朋友们来到公园玩。微风吹过,树枝轻轻摇摆,发出沙沙的声音。小朋友们看着这些树枝,开心的笑了起来。
一天,小张工作到很晚才下班。他来到公园散步,他的脚步很轻,没有惊动躺在地上睡觉的猫咪,大家都对他的行为表示赞赏。
清晨,太阳从东方的地平线缓缓升起,照亮了大地,公园里一片明亮,人们陆陆续续来到公园里散步,场面十分温馨。
小张一直梦想能够环游世界,经过20年的努力,他开车游遍了四大洋五大洲,成功实现了自己的梦想。
春天到了,随着气温的慢慢上升,积雪开始融化,黄河的水量逐渐增多,宁夏的稻田有恢复了生机。
一天,爸爸妈妈带着小明去看海。来到海边,海上的波浪一个接一个,拍打着岸边,小明觉得很有意思。
小张一直梦想能够成为一个成功的木匠。他和一位老师傅学习了20年,经历了许多波折,终于实现了自己的梦想。
一天,老师带着小朋友们来到公园玩耍。小明在吃完了香蕉,把香蕉皮丢在草丛里。老师立刻阻止了小明,说:"我们要保护自然资源,不能随意破坏环境。"小明理解了老师,把香蕉皮捡了起来,丢进垃圾桶。
小张为公司制定了一个发展计划,经过讨论,大家认为这个计划看似完美,实际上却又很多破绽,如果实行会让公司很快破产。
清晨,天刚破晓,鸟儿就开始鸣唱,迎接新的一天。过了一会,人们陆陆续续来到公园里散步,场面十分温馨。
警察正在进行一项案件调查,他来到案件发生的房间门口,把耳朵贴近门,想听清楚里面的声音。
小张在环保会议中提出了一个垃圾分类实行的计划,这个计划非常贴合实际,值得采纳,获得了全票支持。
婚礼当天,男方送给女方一枚戒指,这枚戒指上镶嵌了一颗闪亮的钻石,价值不菲,女方非常喜欢。
今年,农村出身的小张创立了一家公司,经营的很成功,公司一跃世界50强,他的好消息传遍了四面八方,整个中国都为之震撼,就连村里的老乡都为他感到高兴。
小张是一名钻孔工人,他正在帮小明家安装空调。他用电钻在墙上钻了一个孔,随后将空调挂上,空调就装好了。
小张是腾讯公司的一名员工,他的工作是照顾小猫和小狗,他平时工作非常卖力,总是尽心尽力,小猫小狗被他养的肥肥胖胖。
一天,小张拉着一公斤水果到集市上摆摊。集市上非常热闹,而且很少有人卖苹果,所以水果摊上的苹果很快就卖完了。
一天,小张的旧车报废了,开不动了,于是去修理店修好了它。回家路上,他看见一款车很便宜,于是就把旧车卖掉了,换了那款新车。
小张是一名街头艺人,靠卖艺为生。一天,他来到街上,拿出吉他和鼓,开始演奏了起来,不一会,就有很多人给他投币。
小张是腾讯公司的一名员工。他平时喜欢读书,非常博学,什么都懂。他平时喜欢在同事面前卖弄自己的知识,同事们都很爱戴他。
一天,小张和老王一起去餐厅吃饭。小张和老王吃的都很开心。吃完饭后,小张便主动买单,老王十分感谢,强烈表示支持。
小张和爸爸老王在上海待了多年,已经有了许多财富。他们决定在上海买一套房子,安定下来。
《腾讯传记》上映了,小明来到电影院观看。这部电影不太精彩,看完后,小明给出了中肯的评价,认为这部电影5分精彩。
今天,腾讯公司正在评选年度的最佳员工。小张由于平时工作很优秀,也很负责,能够自己承担一切问题,大家全票支持小张成为了年度最佳员工。
幼儿园里,同学们正在上故事课。同学们在老师的呼唤下聚拢到一起,准备听故事。老师专心致志的讲着故事,讲的津津有味,同学们听的精神涣散,在教室里跑来跑去,时不时互相打闹,场面一片温馨。
今天天气很好,小明来到上海旅游。上海的交通网络四通八达,不管去哪里都很方便,小明在上海玩得很开心。
小刚是腾讯公司的一名领导。一天,常年不上班的小刚离奇的坐到自己的位置上,认真检查每一份项目文件,确保没有错误,他仔细的核对了所有细节,终于,他发现这些项目文件看似完美,实际上纤维之间有间隙。
浙江政府准备在永康市建造一条地铁, 专家们都来了,他们对土地和人口等进行了多方面的研究,对项目的可行性进行了详细的评估,最终决定不在永康建设地铁。
今天,天气晴朗。小明来到公园玩耍,他走到池塘边,捡起一些小石子,投入水中。水面上激起了一圈圈波纹,小明认为这非常符合物理规律,觉得非常有趣。
一天,小明去参加毕业典礼。毕业典礼上,校方斥巨资买了许多彩带,挂在礼堂顶部,彩带在空中飘舞,非常漂亮。同学们兴奋地叫了起来。
小明的妈妈非常勤劳。为了家人能够吃上饭,她每天早上很早就要去菜市场买菜,小明非常心疼妈妈,常常独自在卫生间哭泣。
今天学校举办了一场跑步比赛。小明作弊参与,第一个到达终点。裁判队比赛的结果进行了公正的评判,最终取消了小明的成绩。
小张是基督教的一名教徒,他平时的教义工作很多,每个星期天,他都要去教堂做礼拜,在如此繁重的教义工作下,他还是很开心。
一个星期天,小明正在公园里玩。突然,一个香蕉皮飞来,小明没有注意,踩到香蕉皮滑倒了,摔了个四脚朝天,就连裤子也破了。回到家后,妈妈在小明的裤子上缝了一个补丁。
小明是一个学习很差的学生,平时总是考零分。他的妈妈着急坏了,给小明报了一个补习班,这个补习班对待学生十分严格,小明每天放学后都要去补习功课。
小张是宠物公司的一名员工。一天,他一不小心把杀虫剂喂给了猫,他见情况不妙,立刻采取措施来补救这个错误,经过几天的治疗,猫咪又恢复了健康,没有被同事发现,小张松了口气。
张老师在小明的学校工作。他负责教授数学,他平时教学非常认真,为了帮助大家更好地理解课程,总是补充各种各样的课外知识。同学们都很喜欢他。
小张是一名运动员,他一直梦想能在奥运会上夺得金牌。在奥运会上,他进行了多次尝试,终于取得了成功,获得了金牌。
一天,小明生病了,他咳嗽不止,生活不能自理。他来到医院治疗,医生开出了一种特效药,这种药的功效非常显著,小明很快就康复了。
今天,小张的公司成立了一个新的项目,这个项目有许多技术难题,大家都无法解决。小张积极投入工作,以一己之力解决了所有的技术难题。在这次项目中,他立下了汗马功劳,公司的业绩大幅提升,一跃世界50强,团队成员都对他充满了敬佩。
小明的学校举行了一场运动会,比赛的项目都是高难度的花样跳绳,小明也想参与,他没日没夜的反复练习,不断改进,花了很多功夫才学会这项技巧。比赛时,他的努力得到了回报,赢得了第一名。
小张是一名优秀的会计,他现在坐在办公桌前,认真地检查着每一份财务文件,确保没有任何错误,桌上堆满了文件和计算器,他的眼神专注,手中的笔不停地在纸上记录着,小张工作的十分开心

前端一看就是gpt做的💩
#5 · altzin
发帖 2026-08-10 18:51:02 · 快照 2026-08-12 10:33:56

请问,为什么很多人喜欢发个"RT"作为内容@11

曾经的小B给我的感人的信[LCSP胡言乱语]
#0 · altzin
发帖 2026-08-10 18:46:52 · 快照 2026-08-12 10:33:57

LCSP胡言乱语。                                                                                                            小组不复往日,友谊似乎也回不去了。两年以来,大家似乎变了许多。米豪初一开始emo,高似乎有段时间远离了小组,座位也变了许多。一些传统不复存在,如吊钟,偷钟贼。。。一些时候小组甚至无话可聊。回忆3年,小组带来了无数回忆,望友谊永存!!!                                                                        再想说说自己,最近手机又被收,开学后,似乎进入循环,看不到希望,我似乎陷入一片黑暗之中。以往,小组是我的光芒,可是,现在。。。鱼因为上周日我没有陪她打游戏而生气,可是,我手机被收了!!!我最近有点难过,想哭。我最近一直在写作业。《诡秘之主》里罗塞尔大帝在日记里说过:如果有人知道他付出努力能得到回报的话,他也会像我一样努力”可是!!!我并不知道我做题能得到什么回报,感觉每天活在空虚之中。                                        最后,谢谢钱辰飞,让我有了能倾诉的对象。                                                       望永世通联!!!
──10 2025.02.26 22:46

询问关于始皇的问题
#5 · altzin
发帖 2026-08-10 18:25:24 · 快照 2026-08-12 10:34:15

你觉得我之后是否可以尝试加入L站,等时间到了@Yan #7

万字长文《小B史》 记录初中的一段时间
#1 · altzin
发帖 2026-08-10 18:22:33 · 快照 2026-08-12 10:34:25

大量叙事流好像没啥好总结的@Yan #1

简单分类了一下全站帖子精华
#3 · altzin
发帖 2026-08-10 18:21:32 · 快照 2026-08-12 10:34:16

谢谢,看到我的各种帖子了,很棒

询问关于始皇的问题
#2 · altzin
发帖 2026-08-10 18:19:15 · 快照 2026-08-12 10:34:15

好可怕…他怎么变成这样了…现在看起来 大家对他的风评都很不好嘛@xiaolizi #1

询问关于始皇的问题
#0 · altzin
发帖 2026-08-10 18:16:54 · 快照 2026-08-12 10:34:15

没接触过linux.do,因为github账号还没满时间。
请问linux.do站长始皇是曾经在最早期为我们提供共享gpt的那个始皇吗?

万字长文《小B史》 记录初中的一段时间
#0 · altzin
发帖 2026-08-10 18:02:54 · 快照 2026-08-12 10:34:25

小B史
小A和小B是同班同学。初一上的时候,小A和小B在一个神秘的组织C里,这个组织在班级里坐在同一个区域,大家的关系似乎都还不错,挺开心的。一天,小B邀请小A和小C一起去她家。小C也在这个组织里,而且和小B关系很好,已经去小B家好多次了,不过小A可没去过。"明天什么安排?"小A对小B家非常好奇,且感兴趣。"你跟着我吧。"小B轻声回答,预示着这并不是一次平凡的旅途。第二天,小B带着小A和小C出发了,"我们走路去吧,会有点远。"小B对小A说,"我们先去小C家拿点东西。",小A欣然接受,毕竟这看起来非常令人兴奋,至少对小A来说是的。路途中,欢笑一片,出现了许多载入史册的意外。"这个锁看起来不错。"小A指着马路口的一个"公安"锁箱说,"那我来把它翘掉吧",小B此时已经疯了,她从来没有这么疯,连小C都觉得不对劲。到了小B家,小B和小C带着小A玩小B家的猫,小A很感兴趣,拿着各种东西逗它,甚至包括一个"组织C亚克力挂件"——它圆圆的,十分平整,在地上可以形成空气气垫,飞速滑动,猫咪很喜欢,小B都说它"到处都很神奇"。小C和小B很快就对她们常见的东西,包括这只猫失了兴趣,开始看B网站电视,播放着一些二次元的、第五人格的东西,小A不了解这些,只好继续和猫玩。"小A这么喜欢和猫玩。"小B说,小A虽然不是真的特别喜欢和猫玩,但迫于人情世故的无奈,只好肯定回复。晚上,小B先去厨房拆了一些"大山会员店"蛋糕给大家吃,小C和小A吃的很欢,但是小B自己没吃,毕竟平时吃太多了。小B的妈妈自称小B的朋友,曾经向小A讨要过一个"组织C亚克力挂件",也在这天点了一些披萨给大家吃,大家还是很开心的。第二天晚上9点,小A和家人发生了矛盾,小A跑了出去,不知道该跑哪去,想起前一天刚去过小B家,便又准备跑到小B家,到了小B家门口的一条路,小A拍下路牌发到组织C的群里,组织C里的小D立刻叫醒了小B,小B开始警觉。天时不利,小A不知道小B住在那条路的哪个小区了,到处看都不对,甚至问了小C,结果小C说的"银杏小区"也不对,毕竟小C只是经常去,对地址并不熟悉。小A摸索了一阵后,最终想起自己昨天在gps定位仪上留了个位置,跟着走了过去,果然到了小B的家,上了楼,来到小B家门口。小A心慌、害怕,一到小B家门口,就左转往楼梯口走过去。万事总有疏漏,小A书包上的"组织C挂件"们互相碰撞,发出了响声,让小B听见了——小B在前一天就说过小A书包上的挂件响。小B打开了门,出来追小A,小A一会儿上楼梯,一会儿下楼梯,还时不时扭头拍小B,楼梯间很黑,小B打开手电筒,经典照片"闪闪发光"至此被小A拍下。凭借着对地形的熟悉,小B最终还是抓住了小A,甚至还归还了昨天小B落在小A家的荧光笔。事后,"组织C"群里沸沸扬扬,"今晚的事谁也不要说出去。"小B觉得很刺激。那年的最后一天,小B和小C在打电话,小A在群里发现了此事,提出可以让自己和小B再打一个电话,形成3人电话,不知怎么的,这个可怕的决定小B竟然真的决定照做,小A预料到了这个事情,提前降低了手机音量,成功接到了电话,这时已经凌晨了,大家打了一会儿电话后就散了,小A和小B都留下了电话的录音,其中的小C发出许多诡异的声音,实在太可怕,此通话最终被称为12点通话。学期末,学校带大家来到劳技中心,学校粗暴地按照学号切分,于是小C被分到了另一个项目,小A、小B和同在组织C的小D被分到了一个项目。小A其实有点想念小C,但是一看有小B,心生暖意,感觉好像也够了。小D最近似乎出现了问题,称自己"emo",并减少参与组织C的活动,于是小A的作品决定使用一个经典ip"小D大头香",并制作了一系列展品,小B则制作"大白兔奶糖"作为作品,并在海报上标上"大白兔奶糖x小D大头香"提升总体一致性,小D虽然看起来冷漠,但也制作了一些有关或者无关的展品,事情进展的似乎相当不错。一天,有塑封机可以使用,小A塑封了一个组织C的Logo,小B感动,亲手写下了一张"组织C万岁!"小卡片,塑封后送给小A,小A特别喜欢,把它放在手机后面,很久很久,直到现在。那时小D已经开始在组织C内散播"组织C已死"类的言论,小A、小B和小C只是一味的互相吹捧,并试图忽视小D的"胡言乱语",他们并不知道这并不是什么胡言乱语,而是一个预言。时间很快来到了初一下,起初组织C看起来还很正常,小E拿了一本本子专门作为组织C的聊天本,平时传递聊天,甚至出现了"飞书"——两人离得较远,直接把本子扔过去,防止截获。后来,老师调整了作为,组织C的5名成员都能直接通过斜对角传本子了,似乎更加方便了。一天,老师终于对组织C这个名不见经传的组织动手了,他把小D和小C的座位放到了远处,从此只有小A和小B的座位在一起了。很快,组织C貌似真的死了,连春游时都四分五裂,五人组织竟然裂成了四份!至今小A都不明白,是小D有预言能力,还是小D能够操控未来,不过在当时,除了小D,大家仍在试图让自己相信组织C还很正常。春游时虽然小组散开,不过小A
很快找到了小B和小C,并跟着她们一起走,帮她们证伪了"哪里有孔雀看"的谜题,虽然小A感觉小B和小C并不是特别在意他,不过这一天依然对小A印象深刻。"小A你有手机吗?我想看XX小说…"春游时坐在桌子上的小B对小A问到,似乎十分迫切,小A也理解了小B的表现,当场借出手机给小B看,收获了小B的赞扬。后来,小B看见了小F,便让小F坐下谈话,小A趁机向小F买下了小F手里的H本,心想肯定有用。春游前的早上,小A手被车撞了,整个春游的过程,他都很痛苦,在回去的车程上,小A抱着小D来减少痛苦,就像情侣一样,小B和小C觉得十分好笑,但却也赞扬,就连老师都会心一笑,和小B谈论起小A和小D的事。车开回了学校,大家四散,小A在回家时改变了路线,沿着去小B家的路走了一段,企图找回和小B的感觉,毕竟小A看小B越来越顺眼。小A在一个路口看到小B和小C走过去,于是发在组织C的群里。"你在哪?"小B看到了立马回复。"微信路捉迷藏南路,看到你们就逃跑了。"小A兴奋的回复,此时小A虽然不敢见小B,但是明显是已经确定会见到小B了。最后,小B果然带着小C在微信路的另一端等着,抓到了小A。小B带着小C和小A一起去"一家人"商店,这是他们第一次去"一家人"商店,"建议你去医院检查一下,有些小的骨裂也会这样痛的。"小C开始关心起小A,小B也给小A买了金枪鱼饭团,仿佛好日子就要到来,小A沉浸在幻觉中。下一天,小B回家时,小A绕到小B必经之路的前方,开始往回走,又想要遇见小B,又害怕遇见小B,结果真被小B发现了,再次产生了追逐,此时小A的大脑已经无法思考,竟然逃跑进了停车场里的死胡同,被小B逮个正着。从那之后,小A成为了小B的猫,每天在学校里和小B互传H本聊天,放学跟着小B和小C一起回家,先到"一家人"商店给小B和小C买东西吃,又或者是小B和小C请小A吃,然后来到小C的小区门口,让小C回家,继续跟着小B来到小B小区门口,一路上和小B欢声笑语,小A才恋恋不舍的回家。一次小B又送了小A一板"高咀嚼"糖,小A回家时连续吃,嘴里一直有糖,吃完了就再吃一颗,努力试图享受这个过程,似乎吃糖能带来快乐。经过这几天这么一折腾,小A已经非常喜欢小B了,时常在对话中暗示这一点,不过小B并没有过多的在意。一天接近凌晨,小B不知为何似乎崩溃了,竟然主动找到小A的微信,写下了一段很长的文本,"谢谢你,小A,让我有了一个可以倾诉的对象。"这段文本十分感人,小A每次看了都会哭。小B给这段文本取名"胡言乱语",十分悲观,探讨了组织C的死去和班内的人际关系,小B甚至说自己一片迷茫,这么一个卑微的小B也让小A感觉又爱又可怜。小A打印了"胡言乱语",带到学校,经常拿出来看,不过小B不让小A给别人看。小A和小B在这段时间也发生了一次不被预料的会面:小B上完课告诉了小A自己在南北绿豆高架路上,小A算准了时间,来到了小B家门口的路,很快看到了小B乘的车,于是产生了应激反应,开始向西逃跑,不过竟然被小B抓住了,此时小B甚至又在和小C打电话,小C也知道了这个事,还是小C让小B去抓的。两周里,回家的路上发生了各种事,一天,小B回家路上想去丽丽公园看看,便拉着小A一起进去。"别碰这个绿色的绳子,上面有刺,上次我就被扎了"小B提醒小A,当时丽丽公园里不知道为什么草区被绿色的绳子围起来了,小A经常手抓着绿色绳子滑动前行,小B的话说明了这不是个安全的选择。到了丽丽公园的尽头,小B不想绕远路,小A便教小B从尽头的小门翻出去,小B是人生中第一次从丽丽公园翻出去,体验泼好,继续前往小B家的路上,小B还好奇小A为什么只能垂直过马路,并以"直线最短"为由强制小A走斜线。到了小B家小区门口,小B突然拉着小A跑了进去,乘上电梯,到达楼层。"你先在这等着,我先进去看看有没有人,如果没人我再出来拉你进去。"看得出来小B很想小A进去,而小A也不会预料到还能再次来到小B家。小A在小B家看新猫窝,回顾着环境,而小B则在进行着日常,她拆开一袋快递,发现是"马牌柠檬糖",吃了一颗。小A发现小B的手机是被锁在箱子里的,不过小B很快拿来钥匙,把手机取了出来。时间过的非常快,小B还经常和她妈妈打电话,"你先别动,我和我妈打个电话。"这样的场景频频出现,很快就到六点了,小A只能回家,出小B家门的时候,小B把剩下的"马牌柠檬糖"送给了小A。小A在回家的路上闷闷不乐,感觉特别空虚,因为在小B家太快乐了,而这是戒断反应,只能一直吃"马牌柠檬糖"弥补,而这种糖是真的好吃,小A很快就上瘾了,因为小A的大脑已经把"马牌柠檬糖"的味道和小B带给小A的快乐关联起来了,回家后又想吃,感觉糖不够多了,便发消息给小B撒娇说想吃糖,小B似乎很善良,竟然回答:"吃!"小A也就心安理得的又吃了一颗。正如小D所说的,这时候的组织C已经如同虚无,小A完全沉浸在和小B,甚至部分的小C的快乐中,但是小B也不敢相信组织C已死,在H本中回复小A:"小D并没有离去,组织C依在,永存,愿永世通联。别哭了,向
前看,每个人都会有光明的未来,我会帮你的。"小B和小A不仅不知道,暑假后组织C的群里不再会有消息,他们也并不知道,暑假后,小B没有再回过小A一句消息。过了这一周,来到了小A和小B关系最好的第二周,岁月静好,H本仍没有写完,每到音乐课时,来到专用教室,按学号坐,学号比小B小一的小G也会加入H本,为H本增加了一些多样性。这一周,小A仍然跟着小B和小C回家,"那里有辆89,绿灯前还过得去吗?"有时小B还会带小C和小A乘公交车回家。"我们倒是快跑呀绿灯了它就开走了!"最终他们赶上了89车。89车上的屏幕闪烁着,播放着刑事案件纪录片,"我每天早上无聊就是看着这个来上学的。"小B看的津津有味。"我记得有个老头说我有一千万要捐给慈善,大家都当他神经病,结果一查他真有一千万。"下车后,小C回忆起一个案件,讲给小A听,小A也和小C探讨起这个案件。因为有小C在,下车地点不能超过制造路太远,不然就没法经过小C家:他们几个继续向往常一样去了"一家人"商店,不过这时候经常是小A花钱请客。一天,小C不在,小B又决定乘公交车,于是这次,89公交车上只有小B和小A,他们可以乘的更远,最终在小B家附近的一个公交站下了车。小B带着小A去了南北绿豆路上的、离小B家最近的一家"一家人"商店,小A花钱给小B买各种口味的"高咀嚼"糖——已经连续好几天这样了,小B真的很喜欢吃"高咀嚼"糖。"带着小A的作用就是有钱。""你难道觉得我会飞吗?""是的!"小B与小A又进行起了神经的沟通。小B把糖交给小A保管,怕自己会回家不小心吃掉,因为这是明天想在学校里吃的。虽然小A也很爱吃,不过小A还是忍住不吃,毕竟小B想在学校里吃,说不定还会分给小A一点。接下来的目标是小B家,现在他们所在的位置是小B家的南面——小A平常都是从北面进去的,小A质疑小B,认为南面不能进去,而小B则表示可以进去,小A为了讨小B欢心,立刻表示接受,结果小B却说:"小A,你要有自己的想法。"小A大幅震惊,这并不符合预期。和小B坐了几次公交车后,连公交车都染上了一层朦胧的气息,一天早上上学,小A故意搭乘89公交车,企图碰到小B,一上车,小B竟然真的在车上,小A发现了小B,小B也发现了小A,但是他们都不敢打招呼,下车后,为了逃离小A,小B穿入加油站道路,来到了小A的前方,小A对小B的消失一头雾水。当天,小A仍跟着小B到小B小区门口,只见小B妈妈的车竟然正好开到,小B居然上前打招呼,小A以为自己没被发现,松了一口气。小B带着小A继续前往小区深处,来到了停车库的天窗上:这是一块玻璃制成的天窗,踩在上面又要掉下去的感觉,不过小B经常带小A来这里跳。"等一会我妈的车会从这里开过去。"小B提醒小A仔细盯着下面。等了一会,过去了一辆外卖车,小B让小A别管,"怎么这么久还没过来?"等小B妈妈的车的时间似乎超出了小B的预期。不过最后,小A还是见证了小B妈妈的车驶过,虽然说不上有多兴奋,但是也挺害怕。"我得上去了,不然我妈就见到我了,你也快走吧。"时间不多了,小B催促小A离开,小A也是默默的回家了。第二天,小B告诉小A:"我妈昨天问我是不是和小A一起回来的。"小A得知自己被发现,吓了一跳,但也只能无奈接受。那周最后一天,H本终于被写完了,H本可是有150页,小B认为自己从中获取到了很多快乐。回家路上,放走了小C以后,小B带着小A走进了小C家附近的一家文具店,"这个本子好像太薄了…""这个有封面…和H本不一样""就买这个吧!"小B精心挑选着新的本子。"这个多少钱?"小A问老板。"2块钱。"老板平淡的回答。"那买5本吧,反正这个本子比较薄。"小A买了5本。继续前行的路上,小A和小B没有说特别多的话,只是默默跟在小B后面,小B越走越快,小A也紧跟着,他感到不太对,但不知道为什么。小B到家后,小A开始前往自己家,这一次,格外的荒凉。周末,小B去上课,小A也要去上课,不过稍晚一些,小B便让小A先去她那看一看,和她会个面。小B如期前往,在地铁上,他一遍又一遍地算着时间,算出的结果是他几乎可以正好和小B碰面,然后就得去上自己的课了,小A对这个结果有些不安。出了地铁,小B打开了位置共享,不出所料,过了一阵子就在一家"一家人"商店前会面了。小B忙着和一个已经转学的、学号比小B大1的小H聊天,并没有怎么搭理小A,小A感觉有些失落,但仍跟着小B,进入了"一家人"商店,小B给小A买了一个"脆小D"巧克力,小A虽然感觉小B似乎不上心,但只能,也必须感谢。那一天,小A已经经历了太多,他在自己的网站上加了一个页面——上面整整齐齐的摆放着"我爱小B"、"一张小B旅游时的很好看的照片,这是从小B寒假里乱发的大量照片中找到的"、"小A看小B照片的照片",并把这个页面发给小D。小D也如预期的不安分,把这个页面发在组织C的群里,并在小B已读后立刻撤回了。"发!"小B看到这么奇怪的页面,虽然没看清,但却逼迫小D再把它发出来。小B曾经说过对小D有好感,不过小B在平时却经常欺
负小D,小D似乎是喜欢这种欺负,不过也似乎因为带着分享的想法,以及对小B的害怕,还是发了出来,小B看到后很震惊,但是并不震惊,最终基本保持了沉默,只认为太炸裂了,反倒是小D特别震惊,一直哈哈哈的。那周周日,小A带着小D出去玩,去水滴湖玩,因为小D家长不允许小D自己出去玩,小A拍了一些照片发在组织C的群里,而小B却只关心小D戴眼镜了。下一周很快就到了。小A向小B讨要小H的联系方式,企图引起小B的注意,小B也黯淡的同意了,给小A发了小H的名片。因为怕小B撤回,小A一收到就转发给了自己,结果导致了名片失效。小A非常伤心,伴随着害羞和不好意思,难以向小B解释这个事情,不过小B还算善良,又给小A发了一张,让小A成功加上了小H。这一周,似乎一切都在照常进行,但似乎一切都不再进行。一天小B再吃"马牌柠檬糖","你在吃糖!"小A闻到了。"猫鼻子!"小B回答:"不过不能给你。"直到小A给了小B一些钱,小B才给了小A一颗糖,只是包在纸巾里导致粘上了纸巾,而小A一般是用作业本子的纸包的。小A还是享受地吃了糖。音乐课上,他们还在传H本,但是小B却一直和小H聊天,好像心不在焉,在这种情况下,小A发起了一项活动:小A、小G、小B不停按顺序传本子,每次写一个数,直到写到100。虽然中间停滞了很久,但是最终大家还是在痛苦下数到了100。小A已经产生了癔像,总觉得是小B正在进行什么对小A的实验,多次在新的G本上问小B,但是,"没有实验。"小B总是这么回答。小A试图从小G那里了解小B怎么了,但是小G也不知道。小A仍然跟着小B和小C回家,可是不对劲的是,小B也偏向于和旁边的小C说话,就连小C回家了之后,小B和小A说话也很少,就像那个周五,两人快步走着。在全家里,他们不再互相请客,而是各买各的,"好寒酸啊。"当小A拿出最后的硬币买了一个饭团后,小B说。小B反复地说着这句话,小A并不明白为什么会这样,实际上,小A在小B上花了两三百了,已经基本没有现金了。一天班级上网课,小A闲着无聊,把自己的虚拟背景换成"我爱小B",因为小B的突然冷漠让小A并不是特别受得了,小A需要一个地方宣泄自己对小B的爱。小B也在偷偷观察小A,结果发现了这个,和往常不一样的是,她在私聊里大骂小A:"你什么都不懂,不要乱说!"小A迫于压力只能撤下,并再也没有和同学说过对小B的爱。很快,形势开始继续向着小A不喜欢的方向发展,发展的是如此之快,以至于小A都没反应过来。一次,小A和小B走在放学的路上:"到前面那条路你就回去吧,到我家不太好。"小B说到。听到这个,小A是如此的伤心,如此的不甘,但和以前一样,他必须接受。又这样过了几天,小A似乎被冷漠到了极限,一次,来到了曾经小A被抓住的停车场,小B又抓住了小A的脖子走路。"为什么你能抓我的脖子走,我却不能抓你的脖子走?"小A看起来充满了好奇心。"猫还想抓主人?"小B的回复重重的砸在小A心上,小A虽满眼泪水,但已经来到蒙眼路,该回去了。几天后,小A永久的失去了和小B一起回家的机会。期中考试到来了,小A在语文作文中记下了这些事的一部分,饱含感情的,这是小A第一次写满语文作文的格子,也是小A各科总分最高的一次考试。此后,小B仍然经常以相反的方向穿过小B的路线,并碰到小B和小C,可是她们仅仅是漫不经心地打个招呼,甚至有时只有小C打招呼。一次小A和妹妹在丽丽公园玩,小A决定带他的妹妹去小B家门口拍个照,于是他们很快来到了小B家门口。正准备在小B的自行车上拜访手机用于拍照时,小B竟然打开了门——并不是发现了小A,而是出来扔垃圾。"快点回去吧。我就出来扔个垃圾竟然看到这个场面。"小A带着妹妹回了家。次日,小B让小A再也不要去她家。"可是我还怀念啊…"小B写下。"可你再也去不了了。"小B无情地回复。一天,小B被老师抓走了,老师对她说了点什么。"老师对你说了什么?"小A问,可能已经不仅是好奇了。"我预见了这件事,老师让我不要再聊了,恢复到没有本子的状态吧。"这是一句命中注定的回复。不仅是小B预见了,小A也预见了。一个特殊的日子——小B的生日要到了,小A焦急的想着要给小B送点什么,以为靠送礼就能够挽回小B。小B生日前一天,小B去"一家人"商店买了许多小B最爱吃的"高咀嚼"糖和"树叶"水,总共花了60元,并在第二天送给了小B,小B并没有多开心,只是说了一句谢谢,反倒是后面的同学羡慕了。小A不敢相信这一切,觉得总会有解决方法的,他拿出一些食堂里免费的吸管,还有家里口罩的绳子,竟然根据奇怪的几何体规律做出了一个弹力球。"这是他的特殊能力。"小B向同学解释道。那一天,刚做出球,小A自己也想玩一会,所以没有立即送给小B,"我也想玩。"即使上课了,小B还想玩球,小A看到了希望,把球给了小B,小B开心、愉悦的玩着球,一会儿向上垫球,一会儿压扁球,简直像那个曾经发疯、神经、快乐的小B!小A是如此享受这个过程,看着小B玩球,心情舒畅。那一天,小B又开始在G本上聊天了。"我好冷…浑身打颤…好
冷…好累…好烦…想哭~"小B在沉静中写下,当小A询问小B为什么对他冷漠时,小B回复:"对不起,恕我无法控制。"当天,小A完完全全到了极限,把其它几本空本子每一页全都撕了下来,丢在地上,企图依靠页很薄来制造出难以清理的垃圾。"剩下的本子,将会成为班级最闪耀的垃圾。"小B在G本上无助的呼喊着。那天过后,小B又对小A好了一阵子,可能是出于同情,但这没有持续很久。"我要逼自己一次了。"小B在一封新的信里告诉小A,因为她期中考的很差。小A看到这句话,就知道,他的小B一去不复返了,不过小A十分珍惜这封信,一直保留着。在持续的痛苦与强求中,小A和小B也写完了G本,不过G本上其他人写的部分明显比H本多。小B在G本的封面上写上:"谨以此本,纪念组织C的友谊。"G本之后,小A又拿出了一本新的K本,这是小B在预备下送给小A的生日礼物。这一次,小B的回复更少了,K本里几乎都是小A自己的记录、和其他同学的无趣的聊天、甚至小A自己研究出来的解魔方方法。最后一个看起来令人惊喜的事情发生在K本上:小A写下一个同学变猫娘的话语,给小B看,小B非常喜爱,结果回传过程被那个同学截获。那个同学与小A争抢K本,把K本撕坏了。或许是出于这本本子的来历,又或许是对小A最后的尊重,小B调侃那个同学:"你怎么能这样对小A呢?赔钱!"当然最后那个同学并没有赔钱。接近学期末的一天,小A将自己的各种本子和纸条扫描成了电子图片。第二天,小A正在观看H本,小B竟向小A讨回了H本:"给我。"平淡的声音来自小B。"不嘛…"小A想要挽留。"给我!"凶狠的声音也来自小B。"好吧…"小B接过H本,小A的眼里闪烁着无望,"幸好有电子版。"小A松了口气,感觉还可以回顾回顾。后面,小A翻看第二封信,竟被小B当场夺取,可这封信还没有扫描:小A永远的失去了这封信。小B在上学的最后一周去旅游了,"有老师说你不去上课不好。""谁?蒋?""班主任。"在最后一周的最后一天,小B在网上回复了小A最后一句话,从此再也没有回过小A一句话。暑假里,小A曾恨过小B,制作海报和文章诋毁小B,不过他最终理解了,这不是小B想要的。初二上,小A不去上学了,因为学校里不再有组织C,不再有小B可以聊天。小A在公司里补齐了组织C的传记,记录了与小B的历史,仅仅为了备忘。初二下开学前一天,小A又找到已经转学的小H,询问小B的事情。"她也没回我呢。"小H回答,"嗯,中考之后她们应该都会回你的。"

上海耀华路地铁站这里摄像头很多
#0 · altzin
发帖 2026-08-10 17:56:03 · 快照 2026-08-12 10:34:36

好多摄像头
如图,摄像头真的好多。几个闸机上面挂着16个摄像头。每次带新的朋友到这里都要跟朋友介绍这些摄像头。

发布了一个php屎山器,将一切变成goto
#0 · altzin
发帖 2026-08-10 17:08:54 · 快照 2026-08-12 10:35:56

打平表达式、控制流为goto和if
你将在代码中看不到任何高级控制流结构。也看不到任何写在一行的表达式。

编译器地址:https://www.altzin.com/goto.php

示例代码:

<?php
$count = 8;
$array = range(0, $count - 1, 1);
shuffle($array);
$c = count($array);
$g = [[[], $array]];
function rmkey(&$array, $key) {
    unset($array[$key]);
    $temp = [];
    $__fe_0_arr = ($array);
    reset($__fe_0_arr);
    __L_fe_check_0:
    $__fe_0_key = key($__fe_0_arr);
    if ($__fe_0_key === null) goto __L_fe_end_2;
    $__fe_0_val = current($__fe_0_arr);
    $value = $__fe_0_val;
    $temp[] = $value;
    __L_fe_next_1:
    next($__fe_0_arr);
    goto __L_fe_check_0;
    __L_fe_end_2:
    $array = [];
    $array = $temp;
}
$a = 0;
__L_for_check_3:
if (!($a < $c)) goto __L_for_end_5;
$temp = [];
$b = 0;
__L_for_check_6:
if (!($b < count($g))) goto __L_for_end_8;
$k = $g[$b];
$d = 0;
__L_for_check_9:
if (!($d < count($k[1]))) goto __L_for_end_11;
$rr = $k[0];
$pp = $k[1];
$rr[] = $k[1][$d];
rmkey($pp, $d);
$temp[] = [$rr, $pp];
__L_for_inc_10:
$d++;
goto __L_for_check_9;
__L_for_end_11:
__L_for_inc_7:
$b++;
goto __L_for_check_6;
__L_for_end_8:
$g = $temp;
__L_for_inc_4:
$a++;
goto __L_for_check_3;
__L_for_end_5:
$t = 0;
__L_for_check_12:
if (!($t < count($g))) goto __L_for_end_14;
$che = 0;
$i = 0;
__L_for_check_15:
if (!($i < ($c - 1))) goto __L_for_end_17;
$__if_19_done = 0;
if ($g[$t][0][$i] > $g[$t][0][$i + 1]) {
$che = 1;
    $__if_19_done = 1;
}
if ($__if_19_done !== 0) goto __L_if_end_18;
__L_if_end_18:
__L_for_inc_16:
$i++;
goto __L_for_check_15;
__L_for_end_17:
$__if_21_done = 0;
if ($che == 0) {
$array = $g[$t][0];
goto __L_for_end_14;
    $__if_21_done = 1;
}
if ($__if_21_done !== 0) goto __L_if_end_20;
__L_if_end_20:
__L_for_inc_13:
$t++;
goto __L_for_check_12;
__L_for_end_14:
print_r($array);
新写的合唱LDHCT^2
#0 · altzin
发帖 2026-08-10 13:29:30 · 快照 2026-08-12 10:39:50

V: 1.0
B: LDHCT^2
D: B$
J: 100
P: 4/4
Z: 钱辰飞 曲
Q1"高": 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0 |
Q2"中低": 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0/ 5,/ |
Q1: 0 0 0 0 | 0 0 0 0 | 6/ 6/ 7/ 1'/ 2'/ 1'/ 7/ 2'/ | 3' - - 0/ 3/ |
Q2: 1/ 2/ 3/ 5/ 4/ 3/ 2./ 1// | 6, - - 0/ 6,/ | 2/ 1/ 7,/ 6,/ 5,/ 5,/ 2/ 3/ | 1 - - 0/ 1/ |
Q1"高": 1'./ (7// 7/) 6/ 5 5/ 5/ | 6./ (5// 5/) 4/ 3 - | 4/ 6$/ 1/' 6/ 1'./ (1'// 1/') 5/ | 2' - - 0 |
Q2"中": 6./ (5// 5/) 4/ 3 3/ 3/ | 4./ (3// 3/) 2/ 1. 1/ | 6$/, 1/ 1/ 6/, 4./ (3// 3/) 1/ | 2 - - 0/ 5/ |
Q3"低": 1./ (7,// 7,/) 1/ 7, 7,/ 2/ | 1./ (7,// 7,/) 6,/ 5, - | 4, 6$,/ 4,/ 1./ (2// 2/) 3/ | 5 - - 0/ 5,/ |
Q1: 1'/ 1'/ 1'/ 1'/ 6/ 1'/ 1'./ 1//' | 4 - - 0 | 6/ 6/ 7/ 1/' 2'/ 1'/ 2'/ 4'/ | 3' - - 0/ 1'/ |
Q2: 5/ 5/ 5/ 5/ 6/ 6/ 6./ 5// | 4 - - 0/ 6/ | 2'/ 1'/ 7/ 6/ 5/ 5/ 2'/ 7/ | 1' - - 0/ 5/ |
Q3: 1/ 2/ 3/ 5/ 4/ 3/ 2./ 1// | 6, - - 0 | 3/ 3/ 2/ 3/ 4/ 5/ 5/ 5/ | 5 - - 0/ 3/ |
Q1: 4'./ 4'// 3'/ 2'/ 7. 7/ | 7/. 7// 5/ 1/' 3' - | 2'./ 2'// 2'/ 6/ 1'/ 7 2'/ | 1' - 0"转1=#C" 1/ 2/ |
Q2: 6./ 6// 5/ 4/ 3. 3/ | 2./ 2// 1/ 3/ 6 - | 4./ 4// 4/ 4/ 4/ 4 5/ | 3 - 0 6,/ 7,/ |
Q3: 4./ (5// 5/) 6/ 3 6/ 5/ | 5 3/ 5/ 1 - | 6,./ 6,// 6,$/ 5,/ 5,/ 5, 5,/ | 1 - 0 3,/ 3,/ |
[fenye]
Q1: 3/ 6/ 6/ 3// (3// 3/) 2/ 1/ 2/ | 3./ 3// 2./ 1// 6, 1/ 2/ | 3/ 6/ 6/ 3// (7// 7/) 6/ 7/ 1'/ | 2'/ 2'/ 2'/ 1'// 3'// - 0 |
Q2: 1./ (1// 1/) 2// 1// 7, 6,/ 5,/ | 6,/. 6,// 5,/. 4,// 3, 6,/ 7,/ | 1./ (1// 1/) 2// 1// 7,/. (5,// 5,/) 4/ | 3 - 0 2/ 3/ |
Q3: 6, 6, 5, 2, | 3, - - 3,/ 3,/ | 6, 6, 5, 7, | 6, - - 0 |
Q1: 0/ 5/ 4/ 2// 3// - 3/ 5/ | 6/ 3/ 7/ 5// 6// - - | 3./ (6// 6/) 3/ 5./ (6// 6/) 5/ | 2 4/ 3/ 2/ 1/ 7,/ 6,/ | 5#, - 0 1/ 2/ |
Q2: 4/ 4/ 4/ 6,// (7,// 7,/) 5,/ 5/ 2/ | 3/ 3/ 3/ 2// 1// - 1/ 2/ | 3./ (1#// 1/) 6,/ 5,./ (4,// 4,/) 3,/ | 4, - - - | 0 3/ 2/ 1/ 7,/ 6,/ 5#,/ |
Q3: 4, 4,// 5,// 6,/ 5,/ 4,/ 3,/ 2,/ | 3,/ 3,/ 3/, 5/, 3, 3,/ 4/, | 3,./ (6,// 6,/) 1/ 7,./ (6,// 6,/) 7,/ | 6, - 5,/ 4,/ 3,/ 2,/ | 3, - 0 4,/ 3,/ |
Q1: 3 3/ 4/ 3 1/ 2/ | 3/ 6/ 6/ 3// (3// 3/) 2/ 1/ 2/ | 3./ 3// 2./ 1// 6, 1/ 2/ | 3/ 6/ 6/ 3// (7// 7/) 6/ 7/ 1'/ | 2'/ 2'/ 2'/ 1'// 3'// - 0 |
Q2: 6, - 0 6,/ 7,/ | 1./ (1// 1/) 2// 1// 7, 6,/ 5,/ | 6,/. 6,// 5,/. 4,// 3, 6,/ 7,/ | 1./ (1// 1/) 2// 1// 7,/. (5,// 5,/) 4/ | 3 - 0 2/ 3/ |
Q3: 4, 4,/ 6,/ 3, 3,/ 3,/ | 6, 6, 5, 2, | 3, - - 3,/ 3,/ | 6, 6, 5, 7, | 6, - - 0 |
Q1: 0/ 5/ 4/ 2// 3// - 3/ 5/ | 6/ 3/ 7/ 5// 6// - - | 3./ (6// 6/) 3/ 3 7 | 6 3 3 3 | 1# - - - |
Q2: 4/ 4/ 4/ 6,// (7,// 7,/) 5,/ 5/ 2/ | 3/ 3/ 3/ 2// 1// - 1/ 2/ | 3./ (1#// 1/) 6,/ 6, 7, | 3, 6, 2 1# | 6, - - - |
Q3: 4, 4,// 5,// 6,/ 5,/ 4,/ 3,/ 2,/ | 3,/ 3,/ 3/, 5/, 3, 3,/ 4/, | 3,./ (6,// 6,/) 1/ 6, 3 | 2 1 3, 3, | 3, - - - |
Q: 0"转1=bB" 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0 | 0 0 0 0 |
Q1: 0 0 0 1'/ 7/ | 1' - - 1'/ 7/ | 1' - - 2'/ 1'/ | 2' - - 2'// 3'// 2'// 1'// | 5 - 0 5/ 3/ |
Q2: 0 0 0 3/ 5/ | 6 - - 1/ 2/ | 3 - - 2/ 3/ | 5 - - 3/ 5/ | 3 - 0 1/ 7,/ |
Q3: 0 0 0 0 | 0/ 3// 5// 6/ 3// 5// 6// 7// 6/ - | 0/ 1// 2// 3/ 1// 2// 3// 5// 3// 2// 7,/ 1/ | 2/ 2// 3// 2/ 2// 3// 2// 3// 2/ 1/ 2/ | 7, - 0 1/ 2/ |
[fenye]
Q1: 6 - 7. 1' | 7/ 2/' 1'/ 7/ 6. 5 | 4./ (4// 4/) 4// 5// 6$ - | 7$./ (6$// 6/) 1$/ 7 - -"转1=E" 1/ 2/ |
Q2: 6,. 6/ 5. 2/ | 3/ 5/ 2/ 1/ 6, 6,/ 7,/ | 1 1/ 2/ 3$./ (3// 3/) 4// 3// | 5$./ (4// 4/) 3$/ 4 - - 6/, 7/, |
Q3: 3. 1/ 7, 3/ 5/ | 7, 1 6, - | 4,./ (4,// 4,/) 6,$/ 7,$// 6,/ (7,// 7,//) 6,// 7,/ | 1// 7,$/ 1// 7,/ 6,$/ 2 - - 3,/ 3,/ |
Q1: 3/ 6/ 6/ 3// (3// 3/) 2/ 1/ 2/ | 3./ 3// 2./ 1// 6, 1/ 2/ | 3/ 6/ 6/ 3// (7// 7/) 6/ 7/ 1'/ | 2'/ 2'/ 2'/ 1'// 3'// - 0 |
Q2: 1./ (1// 1/) 2// 1// 7, 6,/ 5,/ | 6,/. 6,// 5,/. 4,// 3, 6,/ 7,/ | 1./ (1// 1/) 2// 1// 7,/. (5,// 5,/) 4/ | 3 - 0 2/ 3/ |
Q3: 6, 6, 5, 2, | 3, - - 3,/ 3,/ | 6, 6, 5, 7, | 6, - - 0 |
Q1: 0/ 5/ 4/ 2// 3// - 3/ 5/ | 6/ 3/ 7/ 5// 6// - - | 3./ (6// 6/) 3/ 5./ (6// 6/) 5/ | 2 4/ 3/ 2/ 1/ 7,/ 6,/ | 5#, - 0 1/ 2/ |
Q2: 4/ 4/ 4/ 6,// (7,// 7,/) 5,/ 5/ 2/ | 3/ 3/ 3/ 2// 1// - 1/ 2/ | 3./ (1#// 1/) 6,/ 5,./ (4,// 4,/) 3,/ | 4, - - - | 0 3/ 2/ 1/ 7,/ 6,/ 5#,/ |
Q3: 4, 4,// 5,// 6,/ 5,/ 4,/ 3,/ 2,/ | 3,/ 3,/ 3/, 5/, 3, 3,/ 4/, | 3,./ (6,// 6,/) 1/ 7,./ (6,// 6,/) 7,/ | 6, - 5,/ 4,/ 3,/ 2,/ | 3, - 0 4,/ 3,/ |
Q1: 3 3/ 4/ 3 1/ 2/ | 3/ 6/ 6/ 3/ 7/ 3/ 2/ 1// 2// | 3/ 6,// (6,// 6,/) 4/ 3. 4 | 6// 3// 3/ 6// 3// 3/ 7/ 6/ 7/ 1'/ |
Q2: 6, - 0 6,/ 7,/ | 1./ (1// 1/) 2// 3// 2 2/ 5/ | 3./ 3// 2./ 2// 1 1/ 2/ | 3./ (3// 3/) 3// 5// 6./ (5// 5/) 2/ |
Q3: 4, 4,/ 6,/ 3, 3,/ 3,/ | 6, 3,/ 6,/ 5, 3,/ 5,/ | 4,/ 3,/ 2,/ 1,/ 3, 5,/ 4,/ | 3,/ 3,// 2,// 3,/ 3,// 2,// 4,./ (3,// 3,/) 2,/ |
Q1: 2'/ 1'/ 7/ 6/ 5#/ 0/ 3/ 5=/ | 6./ (6// 6/) 7// 1'// 7./ (3// 3/) 7/ | 2'./ (3// 3/) 2'/ 1'# 6/ 7/ | 1'. 2'/ 7. 5/ | 6 - - - ||
Q2: 3 - 0 1/ 3/ | 4 4/ 5/ 2./ (3// 3/) 5// 6// | 5./ (5// 5/) 4/ 3 2/ 3/ | 4. 4// 3// 2. 2/ | 1 - - - ||
Q3: 4,/ 5#,/ 6,/ 7,/ 3,/ 0/ 1,/ 1/ | 6, 5,/ 4,/ 5, 1/ 7/, | 6, 7, 3, 4,/ 3,/ | 4,. 5,/ 5,/ 6,/ 7,/ 4,/ | 3, - - - ||

单php文件实现的工作量证明代币平台
#1 · altzin
发帖 2026-08-10 13:28:46 · 快照 2026-08-12 10:40:03

额,怎么被截断了…
github/QianCF/php-PoW
自取

单php文件实现的工作量证明代币平台
#0 · altzin
发帖 2026-08-10 13:08:36 · 快照 2026-08-12 10:40:03

不管怎样,适合学校学生使用,或者朋友间玩耍。
直接点击按钮就可以获得一个密码,密码直接用于登录。
可以使用自带的web worker轻松挖矿。
直接部署index.php到任何文件可写的服务器即可。
index.php:

<?php
$DATA_DIR = __DIR__ . '/data';
$USER_FILE = $DATA_DIR . '/users.json';
$GLOBAL_HEAD_FILE = $DATA_DIR . '/head';
$MINTED_DIR = $DATA_DIR . '/minted';
$WALLETS_DIR = $DATA_DIR . '/wallets';
$ZERO_HASH = str_repeat('0', 64);
$MINT_PREFIX = '000000';

date_default_timezone_set('PRC');

/** 64 进制字母表(64 字符) */
const RADIX64_ALPHABET = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_';

function intToRadix64(int $n): string
{
    if ($n === 0) {
        return '0';
    }
    $s = '';
    while ($n > 0) {
        $s = RADIX64_ALPHABET[$n % 64] . $s;
        $n = intdiv($n, 64);
    }
    return $s;
}

function randomRadix64Id(): string
{
    return intToRadix64(random_int(0, PHP_INT_MAX));
}

function q(string $s): string
{
    return htmlspecialchars($s, ENT_QUOTES, 'UTF-8');
}

function currentCredential(): string
{
    return isset($_GET['credential']) ? (string)$_GET['credential'] : (isset($_POST['credential']) ? (string)$_POST['credential'] : '');
}

function jsonResponse(array $data, int $code = 200): void
{
    http_response_code($code);
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
    exit;
}

function ensureDataDir(): void
{
    global $DATA_DIR, $MINTED_DIR, $WALLETS_DIR;
    if (!is_dir($DATA_DIR)) {
        mkdir($DATA_DIR, 0755, true);
    }
    if (!is_dir($MINTED_DIR)) {
        mkdir($MINTED_DIR, 0755, true);
    }
    if (!is_dir($WALLETS_DIR)) {
        mkdir($WALLETS_DIR, 0755, true);
    }
}

function loadUsers(): array
{
    global $USER_FILE;
    if (!is_readable($USER_FILE)) {
        return [];
    }
    $raw = file_get_contents($USER_FILE);
    $d = $raw !== false ? json_decode($raw, true) : null;
    return is_array($d) ? $d : [];
}

function saveUsers(array $users): void
{
    global $USER_FILE;
    ensureDataDir();
    file_put_contents($USER_FILE, json_encode($users, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
}

function findUsernameByCredential(string $credential): ?string
{
    $users = loadUsers();
    foreach ($users as $name => $info) {
        if (isset($info['credential']) && (string)$info['credential'] === (string)$credential) {
            return $name;
        }
    }
    return null;
}

function safeUsername(string $username): string
{
    return preg_replace('/[^a-zA-Z0-9\-_]/', '', $username);
}

function walletDir(string $username): string
{
    global $WALLETS_DIR;
    return $WALLETS_DIR . '/' . safeUsername($username);
}

function ensureWalletDir(string $username): string
{
    $dir = walletDir($username);
    if (!is_dir($dir)) {
        mkdir($dir, 0755, true);
    }
    return $dir;
}

function mintedTokenPath(string $hash): string
{
    global $MINTED_DIR;
    return $MINTED_DIR . '/' . $hash . '.token';
}

function walletTokenPath(string $username, string $hash): string
{
    return walletDir($username) . '/' . $hash . '.token';
}

function getLatestHash(): string
{
    global $ZERO_HASH, $GLOBAL_HEAD_FILE;
    if (!is_readable($GLOBAL_HEAD_FILE)) {
        return $ZERO_HASH;
    }
    $h = trim((string)file_get_contents($GLOBAL_HEAD_FILE));
    if (!preg_match('/^[0-9a-f]{64}$/', $h)) {
        return $ZERO_HASH;
    }
    return $h;
}

function setLatestHash(string $hash): void
{
    global $GLOBAL_HEAD_FILE;
    if (!preg_match('/^[0-9a-f]{64}$/', $hash)) {
        throw new InvalidArgumentException('无效的代币哈希');
    }
    ensureDataDir();
    file_put_contents($GLOBAL_HEAD_FILE, $hash);
}

function listTokenFiles(string $username): array
{
    $dir = walletDir($username);
    if (!is_dir($dir)) {
        return [];
    }
    $files = glob($dir . '/*.token');
    if ($files === false) {
        return [];
    }
    usort($files, function ($a, $b) {
        $ma = @filemtime($a);
        $mb = @filemtime($b);
        if ($ma === $mb) {
            return strcmp($a, $b);
        }
        return $ma <=> $mb;
    });
    return $files;
}

function getTokenCount(string $username): int
{
    return count(listTokenFiles($username));
}

function sha256Hex(string $input): string
{
    return hash('sha256', $input);
}

function verifyMintInput(string $input, string $prevHash): string
{
    global $MINT_PREFIX, $ZERO_HASH;
    if ($prevHash === '') {
        $prevHash = $ZERO_HASH;
    }
    if (!preg_match('/^[0-9a-f]{64}$/', $prevHash)) {
        throw new InvalidArgumentException('上一个代币哈希无效');
    }
    if ($input === '' || strpos($input, $prevHash) !== 0) {
        throw new InvalidArgumentException('输入必须以当前上一个代币哈希为前缀');
    }
    $hash = sha256Hex($input);
    if (strpos($hash, $MINT_PREFIX) !== 0) {
        throw new InvalidArgumentException('哈希未满足 6 个前导零');
    }
    return $hash;
}

function addToken(string $username, string $input): array
{
    global $GLOBAL_HEAD_FILE, $ZERO_HASH;

    ensureWalletDir($username);
    ensureDataDir();

    $fp = fopen($GLOBAL_HEAD_FILE, 'c+');
    if ($fp === false) {
        throw new RuntimeException('无法打开全局链头');
    }
    if (!flock($fp, LOCK_EX)) {
        fclose($fp);
        throw new RuntimeException('无法锁定全局链头');
    }

    $raw = stream_get_contents($fp);
    $prevHash = $ZERO_HASH;
    if ($raw !== false && $raw !== '') {
        $h = trim($raw);
        if (preg_match('/^[0-9a-f]{64}$/', $h)) {
            $prevHash = $h;
        }
    }

    try {
        $hash = verifyMintInput($input, $prevHash);

        $mintedPath = mintedTokenPath($hash);
        if (is_file($mintedPath)) {
            throw new InvalidArgumentException('该代币已存在');
        }

        if (file_put_contents($mintedPath, $input, LOCK_EX) === false) {
            throw new RuntimeException('写入全局代币失败');
        }

        $walletPath = walletTokenPath($username, $hash);
        if (file_put_contents($walletPath, $input, LOCK_EX) === false) {
            @unlink($mintedPath);
            throw new RuntimeException('写入持有记录失败');
        }

        rewind($fp);
        ftruncate($fp, 0);
        fwrite($fp, $hash);
        fflush($fp);
    } finally {
        flock($fp, LOCK_UN);
        fclose($fp);
    }

    return [
        'hash' => $hash,
        'count' => getTokenCount($username),
        'prev_hash' => $prevHash,
        'latest_hash' => $hash,
    ];
}

function transferTokens(string $fromUser, string $toUser, int $count): array
{
    if ($fromUser === $toUser) {
        throw new InvalidArgumentException('不能向自己转账');
    }
    if ($count <= 0) {
        throw new InvalidArgumentException('转账数量必须大于 0');
    }

    $users = loadUsers();
    if (!isset($users[$toUser])) {
        throw new InvalidArgumentException('目标账户不存在');
    }

    ensureWalletDir($toUser);
    $files = listTokenFiles($fromUser);

    if (count($files) < $count) {
        throw new InvalidArgumentException('代币数量不足');
    }

    $moved = [];
    for ($i = 0; $i < $count; $i++) {
        $src = $files[$i];
        $hash = basename($src, '.token');
        if (!preg_match('/^[0-9a-f]{64}$/', $hash)) {
            throw new RuntimeException('代币文件损坏');
        }
        if (!is_file(mintedTokenPath($hash))) {
            throw new RuntimeException('全局代币不存在');
        }
        $dst = walletTokenPath($toUser, $hash);
        if (is_file($dst)) {
            throw new RuntimeException('目标账户已持有该代币');
        }
        if (!rename($src, $dst)) {
            throw new RuntimeException('转账失败');
        }
        $moved[] = $hash;
    }

    return [
        'moved' => $moved,
        'from_count' => getTokenCount($fromUser),
        'to_count' => getTokenCount($toUser),
    ];
}

function requireUser(string $cred): string
{
    if ($cred === '') {
        throw new InvalidArgumentException('请先登录');
    }
    $name = findUsernameByCredential($cred);
    if ($name === null) {
        throw new InvalidArgumentException('凭证无效');
    }
    return $name;
}

// ---------- 路由 ----------
if (isset($_POST['api'])) {
    $api = (string)$_POST['api'];
    $cred = isset($_POST['credential']) ? (string)$_POST['credential'] : '';

    try {
        switch ($api) {
            case 'create_account': {
                ensureDataDir();
                $username = randomRadix64Id();
                $password = randomRadix64Id();
                $users = loadUsers();
                while (isset($users[$username])) {
                    $username = randomRadix64Id();
                }
                $users[$username] = ['credential' => $password];
                saveUsers($users);
                ensureWalletDir($username);
                ?>账户已创建。<br>
                用户名:<strong><?= q($username) ?></strong><br>
                密码:<strong><?= q($password) ?></strong><br>
                请妥善保存,丢失将无法登录。<br>
                <a href="index.php?credential=<?= q(urlencode($password)) ?>">使用此密码直接进入</a> |
                <a href="index.php">返回</a><?php
                exit;
            }
            case 'login': {
                if ($cred === '') {
                    header('Location: index.php?err=empty');
                    exit;
                }
                $name = findUsernameByCredential($cred);
                if ($name === null) {
                    header('Location: index.php?err=invalid');
                    exit;
                }
                header('Location: index.php?credential=' . urlencode($cred));
                exit;
            }
            case 'get_status': {
                $name = requireUser($cred);
                jsonResponse([
                    'ok' => true,
                    'username' => $name,
                    'token_count' => getTokenCount($name),
                    'latest_hash' => getLatestHash(),
                ]);
            }
            case 'submit_token': {
                $name = requireUser($cred);
                $input = isset($_POST['input']) ? (string)$_POST['input'] : '';
                if ($input === '') {
                    jsonResponse(['error' => '缺少输入'], 400);
                }
                $result = addToken($name, $input);
                jsonResponse(['ok' => true] + $result);
            }
            case 'transfer': {
                $name = requireUser($cred);
                $target = isset($_POST['target_username']) ? trim((string)$_POST['target_username']) : '';
                $count = isset($_POST['count']) ? (int)$_POST['count'] : 0;
                if ($target === '') {
                    jsonResponse(['error' => '请输入目标用户名'], 400);
                }
                $result = transferTokens($name, $target, $count);
                jsonResponse(['ok' => true] + $result);
            }
            default:
                jsonResponse(['error' => '未知 api'], 400);
        }
    } catch (InvalidArgumentException $e) {
        if (!empty($_POST['ajax']) || in_array($api, ['get_status', 'submit_token', 'transfer'], true)) {
            jsonResponse(['error' => $e->getMessage()], 400);
        }
        ?><?= q($e->getMessage()) ?> <a href="index.php<?= $cred !== '' ? '?credential=' . urlencode($cred) : '' ?>">返回</a><?php
        exit;
    } catch (RuntimeException $e) {
        jsonResponse(['error' => $e->getMessage()], 500);
    }
}

// ---------- 页面 ----------
$cred = currentCredential();
$name = $cred !== '' ? findUsernameByCredential($cred) : null;
$loggedIn = $name !== null;
?>
<h1>代币系统</h1>

<?php if (!$loggedIn): ?>
    <?php if (isset($_GET['err'])): ?>
        <?php if ($_GET['err'] === 'invalid'): ?>密码无效。<br><?php endif ?>
        <?php if ($_GET['err'] === 'empty'): ?>请输入密码。<br><?php endif ?>
    <?php endif ?>

    <form method="post" action="index.php">
        <input type="hidden" name="api" value="create_account">
        <button type="submit">获取一个账户</button>
    </form>
    <br>
    <form method="post" action="index.php">
        <input type="hidden" name="api" value="login">
        密码:<input type="text" name="credential" required>
        <button type="submit">登录</button>
    </form>
    基于POW的代币系统。<br/>
    当前用户:请先登录
    用户名(转账用):<strong>请先登录</strong>
    代币数量:<span id="token-count">请先登录</span><br>
    全局链头哈希(挖矿前缀,所有用户共用):<br>
    <span id="latest-hash" style="word-break:break-all"><?=file_get_contents("data/head")?></span><br><br>

    <hr>
    <h2>挖矿</h2>
    规则:构造字符串,前缀为当前「全局链头哈希」,后面追加任意内容,使 SHA256 的十六进制结果以 6 个 0 开头。任何人挖到新代币都会推进同一条链。<br>
    Worker 数量:<input type="number" id="worker-count" value="1" min="1" max="32" size="3" disabled>
    <button type="button" id="btn-start-mining" disabled>开始计算</button>
    <button type="button" id="btn-stop-mining" disabled>停止计算</button><br>
    状态:<span id="mining-status">未开始</span><br>
    已尝试次数:<span id="mining-tries">0</span><br><br>

    <hr>
    <h2>转账</h2>
    向目标账户发送代币(服务器选取最老的代币,不保留转账记录):<br>
    目标用户名:<input type="text" id="transfer-target" size="20" disabled>
    数量:<input type="number" id="transfer-count" value="1" min="1" size="6" disabled>
    <button type="button" id="btn-transfer" disabled>发送</button>
<?php else: ?>
    基于POW的代币系统。<br/>
    当前用户:<?= q($name) ?>
    用户名(转账用):<strong><?= q($name) ?></strong>
    <a href="index.php">退出登录</a><br><br>
    代币数量:<span id="token-count">加载中…</span><br>
    全局链头哈希(挖矿前缀,所有用户共用):<br>
    <span id="latest-hash" style="word-break:break-all">加载中…</span><br><br>

    <hr>
    <h2>挖矿</h2>
    规则:构造字符串,前缀为当前「全局链头哈希」,后面追加任意内容,使 SHA256 的十六进制结果以 6 个 0 开头。任何人挖到新代币都会推进同一条链。<br>
    Worker 数量:<input type="number" id="worker-count" value="1" min="1" max="32" size="3">
    <button type="button" id="btn-start-mining">开始计算</button>
    <button type="button" id="btn-stop-mining" disabled>停止计算</button><br>
    状态:<span id="mining-status">未开始</span><br>
    已尝试次数:<span id="mining-tries">0</span><br><br>

    <hr>
    <h2>转账</h2>
    向目标账户发送代币(服务器选取最老的代币,不保留转账记录):<br>
    目标用户名:<input type="text" id="transfer-target" size="20">
    数量:<input type="number" id="transfer-count" value="1" min="1" size="6">
    <button type="button" id="btn-transfer">发送</button>
    <span id="transfer-result"></span>

    <script>
    (function(){
        var cred = <?= json_encode($cred, JSON_UNESCAPED_UNICODE) ?>;
        var ZERO_HASH = '<?= $ZERO_HASH ?>';
        var mining = false;
        var workers = [];
        var currentPrevHash = ZERO_HASH.toLowerCase();
        var totalTries = 0;
        var foundPending = false;
        var statusReqSeq = 0;
        var headPollTimer = null;

        function esc(s){ var d=document.createElement('div'); d.textContent=s; return d.innerHTML; }

        function postApi(api, data, cb) {
            var fd = new FormData();
            fd.append('api', api);
            fd.append('credential', cred);
            fd.append('ajax', '1');
            for (var k in data) if (data.hasOwnProperty(k)) fd.append(k, data[k]);
            var x = new XMLHttpRequest();
            x.open('POST', 'index.php');
            x.onload = function(){
                try { cb(JSON.parse(x.responseText)); }
                catch(e) { cb({ error: '响应解析失败' }); }
            };
            x.onerror = function(){ cb({ error: '网络错误' }); };
            x.send(fd);
        }

        function setStatus(text) {
            var el = document.getElementById('mining-status');
            if (el) el.textContent = text;
        }

        function updateTries(n) {
            totalTries = n;
            var el = document.getElementById('mining-tries');
            if (el) el.textContent = String(n);
        }

        function sha256HexClient(str) {
            return crypto.subtle.digest('SHA-256', new TextEncoder().encode(str)).then(function(h){
                var a = new Uint8Array(h), s = '';
                for (var i = 0; i < a.length; i++) {
                    var x = a[i].toString(16);
                    if (x.length < 2) x = '0' + x;
                    s += x;
                }
                return s;
            });
        }

        function verifyMintClient(input, prevHash) {
            if (!input || input.indexOf(prevHash) !== 0) {
                return Promise.resolve({ ok: false, error: '前缀不匹配' });
            }
            return sha256HexClient(input).then(function(hash){
                if (hash.indexOf('000000') !== 0) {
                    return { ok: false, error: '哈希未满足难度' };
                }
                return { ok: true, hash: hash };
            });
        }

        var workerBlobUrl = null;

        function terminateWorkers() {
            for (var i = 0; i < workers.length; i++) {
                try { workers[i].postMessage({ stop: true }); } catch(e) {}
                workers[i].terminate();
            }
            workers = [];
        }

        function stopMining() {
            mining = false;
            foundPending = false;
            terminateWorkers();
            document.getElementById('btn-start-mining').disabled = false;
            document.getElementById('btn-stop-mining').disabled = true;
            setStatus('已停止');
        }

        function ensureHeadPollRunning() {
            if (!headPollTimer) startHeadPoll();
        }

        function getWorkerBlobUrl() {
            if (workerBlobUrl) return workerBlobUrl;
            var workerCode = [
                'var PREFIX="000000";',
                'var active=false;',
                'function sha256Hex(str){',
                '  return crypto.subtle.digest("SHA-256", new TextEncoder().encode(str)).then(function(h){',
                '    var a=new Uint8Array(h), s="";',
                '    for(var i=0;i<a.length;i++){ var x=a[i].toString(16); if(x.length<2) x="0"+x; s+=x; }',
                '    return s;',
                '  });',
                '}',
                'async function mine(prev, startNonce, batchSize){',
                '  var nonce=startNonce;',
                '  while(active){',
                '    for(var i=0;i<batchSize&&active;i++,nonce++){',
                '      var input=prev+nonce;',
                '      var hash=await sha256Hex(input);',
                '      if(hash.indexOf(PREFIX)===0){',
                '        active=false;',
                '        self.postMessage({found:true,input:input,hash:hash});',
                '        return;',
                '      }',
                '    }',
                '    if(active) self.postMessage({tries:batchSize});',
                '  }',
                '}',
                'self.onmessage=function(e){',
                '  if(e.data.stop){ active=false; return; }',
                '  active=true;',
                '  mine(e.data.prevHash, e.data.startNonce, e.data.batchSize||800);',
                '};'
            ].join('\n');
            workerBlobUrl = URL.createObjectURL(new Blob([workerCode], {type:'application/javascript'}));
            return workerBlobUrl;
        }

        function spawnWorkers() {
            var n = parseInt(document.getElementById('worker-count').value, 10);
            if (!n || n < 1) n = 1;
            if (n > 32) n = 32;
            var url = getWorkerBlobUrl();
            for (var w = 0; w < n; w++) {
                (function(workerId){
                    var worker = new Worker(url);
                    worker.onmessage = function(ev) {
                        var d = ev.data;
                        if (d.found && !foundPending) {
                            foundPending = true;
不依赖任何数学知识的“慢傅里叶变换”算法
#0 · altzin
发帖 2026-08-10 12:16:57 · 快照 2026-08-12 10:40:27

slowFT

第一次实现了“不用任何数学知识,编程初学者都可以写的傅里叶变换”。

基于相减能量最低法和三分法的慢速傅里叶变换。

这是一个“暴力搜索”傅里叶变换算法,它的核心思想极其简单:对每一个可能的频率,通过反复尝试找到最匹配的正弦波。

判断匹配程度的方法是,从原信号中减掉,剩余信号总能量越低,越匹配。

算法的工作方式:
1. 计算平均值,找到直流分量
2. 对每个频率,先搜索最佳相位:在0到1之间使用三分法不断缩小区间,找到使减去后能量最小的相位
3. 再用同样的方法搜索最佳幅度:在0到一个很大的数之间使用三分法找最优值
4. 最终每个频率都得到一对值(幅度,相位)

与传统傅里叶变换的区别:
- 不需要任何数学知识:不理解复数、欧拉公式、正交性也能看懂
- 直观易懂:就是在做“波形减去尝试”——调整正弦波的位置和高度,看它能减掉多少能量
- 极其缓慢:对每个频率都要进行几十次搜索,每次搜索都要遍历全部数据点

适用场景:
- 教学演示:让学生理解傅里叶变换的物理意义
- 自定义基函数:可以搜索方波、三角波等其他波形
- 验证傅里叶变换算法的正确性和可行性

局限性:
- 计算复杂度极高:O(N² × 迭代次数),比标准FFT慢到不可理喻

这不是一个实用的算法,但它是理解傅里叶变换“到底在干什么”的最佳入门代码。

代码如下

<?php

function slowFT($array){
    $FT=[];
    $zero=array_sum($array)/count($array);
    $FT[0]=[$zero,null];
    for($freq=1;$freq<floor(count($array)/2)-1;$freq++){
        $phase=get_phase($array,$freq);
        $size=get_size($array,$freq,$phase);
        $FT[$freq]=[$size,$phase];
    }
    return $FT;
}
function customsin($count,$freq,$phase,$size,$x){
    return $size*sin(2*pi()*($freq*$x/$count-$phase));
}
function getenergy($freq, $phase, $size, $array) {
    $energy = 0;
    for ($x = 0; $x < count($array); $x++) {
        $energy += ($array[$x] - customsin(count($array), $freq, $phase, $size, $x)) ** 2;
    }
    return $energy;
}
function get_phase($array,$freq){
    $min=0;
    $max=1;
    for($i=0;$i<15;$i++){
        $mid1=$min+($max-$min)*1/3;
        $mid2=$min+($max-$min)*2/3;
        $energy1=getenergy($freq,$min,1,$array);
        $energy2=getenergy($freq,$mid1,1,$array);
        $energy3=getenergy($freq,$mid2,1,$array);
        $energy4=getenergy($freq,$max,1,$array);
        $sum1=$energy1+$energy2;
        $sum2=$energy2+$energy3;
        $sum3=$energy3+$energy4;
        if($sum1<=$sum2 && $sum1<=$sum3){
            $max=$mid1;
        }elseif($sum2<=$sum1 && $sum2<=$sum3){
            $min=$mid1;
            $max=$mid2;
        }else{
            $min=$mid2;
        }
    }
    return ($min+$max)/2;
}
function get_size($array, $freq, $phase) {
    $min = 0;
    $max = 200000000;
    for ($i = 0; $i < 80; $i++) {
        $m1 = $min + ($max - $min) / 3;
        $m2 = $min + ($max - $min) * 2 / 3;
        $energy1 = getenergy($freq,$phase,$m1,$array);
        $energy2 = getenergy($freq,$phase,$m2,$array);
        if ($energy1 < $energy2) {
            $max = $m2;
        } else {
            $min = $m1;
        }
    }
    return ($min + $max) / 2;
}
测试发图功能和新的markdown支持
#0 · altzin
发帖 2026-08-10 11:51:44 · 快照 2026-08-12 10:40:35

Altzin Logo
希望可以显示。
这个文字会粗体
这个文字会斜体

这可能是标题

尝试更大的标题

尝试更小的标题

我才不引用呢

<?php
echo "PHP是世界上最好的语言";

高亮文本
- 第一项
- 二
- 五

本帖子由我妹妹发布
#4 · altzin
发帖 2026-08-10 11:42:04 · 快照 2026-08-12 10:40:57

@see0see #3 你好,我是妹妹

小明学飞
#0 · altzin
发帖 2026-08-10 11:41:16 · 快照 2026-08-12 10:40:44

小明花了10年,终于学会了飞。成功在天上飞了几分钟后,他发现自己不会降落——不飞上天就不能学降落。这时的他,只剩下一次机会,要么学会降落,要么摔死。

基本上就是…送门罗币了。只有一个人能拿到。
#2 · altzin
发帖 2026-08-10 11:30:51 · 快照 2026-08-12 10:40:50

@中国石化 #1 谢谢购买…哈哈我血亏。挖了几个月的