swoole6.2 发布了,号称革命性升级
https://mp.weixin.qq.com/s/bcrHZeF1Yu5ITstsl7rLlQ
Swoole 6.2 正式引入 io_uring 技术,全面替代传统的 epoll 实现异步 IO
能不能 make php great again ?
xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。
https://mp.weixin.qq.com/s/bcrHZeF1Yu5ITstsl7rLlQ
Swoole 6.2 正式引入 io_uring 技术,全面替代传统的 epoll 实现异步 IO
能不能 make php great again ?
用AI从常规病理切片重建空间蛋白图谱:基于H&E图像的高维蛋白质表达预测




















用AI从常规病理切片重建空间蛋白图谱:基于H&E图像的高维蛋白质表达预测

编辑丨&
空间蛋白质组学,它代表着蛋白质表达的高分辨率定位,对于生物学与疾病的研究至关重要。而相关空间蛋白质组学的翻译可不算简单,成本、复杂性和可扩展性,现有方法仍不足以填上这些方面的缺漏。
于此,美国斯坦福大学(Stanford University School)等研究团队介绍了 H&E 到蛋白质表达(HEX),这是一个 AI 模型,旨在从标准组织病理切片中计算生成空间蛋白质组学谱。
此外,该团队还开发了一种多模态数据集成方法,结合了上述原始的 H&E 图像与 AI 衍生的虚拟空间蛋白质组学,比传统临床病理学和分子生物标志物,提高了 22% 的预后准确性,并提高了 24% 至 39% 的免疫治疗反应预测。
相关研究内容以「AI-enabled virtual spatial proteomics from histopathology for interpretable biomarker discovery in lung cancer」为题,于 2026 年 1 月 5 日发布在《Nature Medicine》。

论文链接:https://www.nature.com/articles/s41591-025-04060-4
图像特征到空间蛋白表达
HEX 通过利用最先进的病理学基础模型进行训练,基于 H&E 图像同时预测 40 个蛋白质生物标志物的表达,可以从标准组织病理学生成虚拟空间蛋白质组学谱。
团队通过两个独立数据集与包含 57plex CODEX 的泛癌数据集,对 HEX 模型的准确性与普遍性进行了评估验证。

图 1:HEX 的开发、验证及临床应用。
在结构设计上,HEX 以病理图像的局部区域为输入,输出对应区域内多种蛋白的空间表达强度。模型并非简单地进行整体回归,而是保留空间分辨率,使预测结果能够以“图谱”的形式呈现。这一点对于后续的生物学解释尤为关键。

图 2:HEX 在蛋白质生物标志物预测中的性能评估。
交叉性能验证:
实验团队在 Stanford-WSI 数据集进行了五重交叉验证,通过 40 个生物标志物,HEX 实现了 H&E 图像中蛋白质表达的准确预测。与次优模型条件 GAN(CGAN)相比,HEX 显著提升了 26% 的皮尔逊系数、44%的斯皮尔曼系数、15% 的 SSIM 和 80% 的 MSE。
独立验证:
接下来,团队使用完整的 Stanford-WSI 数据集,评估了两个独立微阵列(TMA)的表现。依旧是与次优模型 CGAN 相比,HEX 几乎将所有系数翻了个番。这些结果共同凸显了 HEX 在独立数据集上的普遍性和稳健性。
值得注意的是,HEX 并未只关注肿瘤细胞本身。模型同样能够在肿瘤微环境中,对免疫相关蛋白的空间分布作出合理预测,为后续的免疫状态分析提供了基础。
多模态共关注整合
H&E 提供了详细的细胞组学,虚拟 CODX 图谱提供了关于空间分辨蛋白表达的补充信息。为了整合这些不同但协同效应的数据类型,研究团队开发了多模态共关注整合(MICA),这是一种深度学习框架,可以明确建模跨模态交互和空间关系。
在实验验证的分析中,团队将小细胞肺炎区分为早期与晚期,并检验 HEX 预测得到的虚拟空间蛋白图谱在这两类人群中的表现差异。
在早期肺癌样本中,HEX 预测的空间蛋白表达呈现出更为局部化和结构化的模式。部分与肿瘤发生早期相关的蛋白,其预测信号主要集中于肿瘤边缘区域或特定细胞群体周围。
在晚期肺癌样本中,HEX 预测的蛋白空间模式表现出明显不同的特征。多种蛋白的高表达区域在空间上更加弥散,与组织结构的对应关系也更为复杂。这反映了晚期肿瘤在细胞组成和微环境层面的高度异质性。

图 3:MICA 提升免疫治疗反应预测能力,并识别晚期非小细胞肺癌中的空间蛋白质组特征。
对于早期肺癌患者,这些空间蛋白特征更多与长期预后相关,提示模型捕捉到的信号可能与肿瘤早期生物学行为及潜在进展风险有关。而在晚期患者中,预测信号则更多与治疗反应,尤其是免疫相关治疗结局相关联。
组织学+虚拟空间蛋白质组学
HEX 是一种高精度的预测方式,已扩展至 34 种组织类型和新的蛋白质标记,展示了相较于其他基于 H&E 图像预测蛋白质表达的方法的显著性能提升。相比临床风险因素,HEX 将预后预测的准确性提高了 20% 以上。
HEX 模型实现了更准确的靶向蛋白表达预测,虽然说,目前仍存有依赖抗体行免疫荧光成像等问题,但大都可以期待新型的细胞技术合作解决。该模型为标准组织病理学中的空间生物学研究提供了低成本且可扩展的方法,这使得原本受限于成本和通量的空间分子分析,首次有可能在更大规模的临床数据中展开。

过去半年多在一家远程工作的公司工作(现已离职),自己以前没在远程的公司上过班,所以对远程工作还挺好奇。相信很多人也对远程工作的体验很好奇,所以分享一下这半年多的远程工作体验。
工作时间和正常公司的约定是一样的,理论上是早上 9 点到下午 6 点。不过我感觉公司好像没有特别强调过这个时间,产研每天早上 10 点早会,正常情况下所有人都要在线。我感觉这个时间和互联网的的灵活上下班差不多。我以前公司是最迟 10 点打卡,如果 9 点打卡就 6 点下班。10 点打卡就 7 点下班。大家一般都是九点半陆陆续续到公司,这样下班也刚好也错过晚高峰。
所以实际上是所有人 10 点之后必须在线。一般约会议也是在 10 点后。每天早上 10 点每个人都同步一下昨天的工作进展和今天的规划。有一个大的任务面板,每个人工作事项在上面。有些任务要几个人协调,会上可能也会快速讨论一下。这样基本上就能知道团队的整体情况。
如果当前 App 迭代版本有什么需要讨论的,一般会在集体早会后在我们小组群里一起语音沟通一下。现在的在线会议都会记录语音自动总结,会议纪要会自动发到群里。
实际上一天里只要早上 10 点上线,工作时间能收到飞书消息就可以了。常规的语音沟通都尽量安排在固定的早上早会后。其他类型的沟通一般都会提前约一下时间。公司也有几十人,不会所有人都刚好在线且有空,也很容易理解。
每周有两个周会。周一下午是全员会议,每个小组会总结汇报上周进展,本周规划。周四下午是产研的周会,会以每个任务为单位一起同步一下开发进展,规划下周的开发任务。
每个季度会全员线下见一次,通常在上海。会一起讨论一下下个季度的目标,汇报一下各组这个季度的进展。每个小组如果有需求也可以多呆一天,一般安排是两天时间。
工作地点自由无论是给员工还是公司都提供了很大的好处。工作地点对一部分人而言可以是一种“地理套利”。同样的生活品质在一线城市比在二三线城市要贵很多。而且很多人也未必多喜欢在大城市生活,在自己家乡离亲人近,文化风俗也更亲近一些。很多打工人在一线城市也只是迫不得已的背井离乡。很多同事都选择在自己的家乡。印象挺深一个同事在山西阳泉,我说这个地方我怎么有点眼熟,这不是刘慈欣以前在水电站上班的地方吗!公司里一大半的同事都不在一线城市。

对于喜欢四处走走的人来说,远程工作也让"数字游民式"的短期旅居成为可能。比如我定居杭州,但是杭州夏天和冬天气候都不太好。我会选择一次性在外面轻度旅行两三周。比如夏天的时候我在伊犁呆了两周,12 月的时候在北海道呆了两周。外出旅行的时候我一般会选择早上工作半天,下午出去玩半天,晚上再接着处理半天工作。也有的时候会请一天假。这样也可以心态比较好的体验一个地方,不是以前那种行程排的很紧的打卡旅游。
在伊犁琼库什台的时候,我本来在院子里和老板聊天。忽然来了工作语音,我说哎呀我要去工作了。老板听到说直摇头说,出来玩还要处理工作真是苦啊。后面我说,不是在玩的时候需要工作,我是在工作的时候出来玩。老板说那就羡慕了。
总的来的说工作地点自由对幸福感的提升还是很明显的。
工作地点自由后对于公司的招聘帮助是显而易见的。如果公司在线下,招聘的人群范围就是公司周边一小时通勤时间覆盖的地方。这也是很多公司必须在一线城市的原因,这些地方的相关人才密度比较高。远程以后招聘范围一下就变大了很多,所有网络能到的地方都是招聘范围。同样的招聘要求一下子可选的人就多了数十倍。也有一些同事都不在一个时区。
除了招聘范围增加,同样的薪水待遇对于非一线城市区域的人才吸引力也会高的多,属于双向奔赴了。我之前和一个杭州的团队聊天,意外得知他们还有一个团队在长沙。我问为什么会在长沙,老板说他们刚起步的时候待遇一般,在杭州很难招到优秀的人。刚好一个合伙人是湖南的,干脆就回长沙成立了一个分公司,同样的待遇很快就招到了合适的人。
前面提到,工作的要求只要在工作时间在线就行。如果有一些临时外出需求很容易安排出时间。或者某些原因觉得状态不好,休息一下把工作调整到晚上或者周末做都行。这样可以自己安排 8 小时工作量的工作时间也额外提升了工作的满意度。
比如我有的时候会在工作日下午四五点的时候选择去看电影。这样错峰去电影院会安静一些。然后晚上回来再工作一段时间。有的时候天气好,也会选择去附近的公园散步半个小时。我推测有一些同事也可能会下午去接一下孩子放学什么的。比较重要的讨论都会提前约时间,因此时间还是挺容易安排的。
我个人感觉比较舒适的通勤时间是 30 分钟左右。以前找工作,如果公司地点离我超过 30 分钟车程我内心就觉得要扣分了。30 分钟通勤在租房的时候还比较容易实现。不过很多人因为一些现实问题(买房、夫妻双方工作地点不同、孩子教育)应该很多人都需要 1 个小时左右的通勤时间。这个通勤时间在小地方应该会觉得夸张,在北京上海还是挺常见的。而且为了节省时间大多数人还会选择在到公司再吃早餐。便利店的包子、面包我真是吃了个遍。远程以后通勤的时间完全就省下来了。每个人相当于多赚了 1 个小时的有效时间。同样工作 8 小时,远程省去了通勤折腾,身体不累、心情不烦,幸福感提升不少。
很多公司的工作空间追求性价比会比较拥挤,我觉得尤其难受的是办公桌比较小。因为我会外接一个 27 寸的显示,放一台 16 寸的 mbp 。有的办公桌比较小空间就很局促。我还比较喜欢用升降桌,一般公司也不会配升降桌。椅子还可以自己带,桌子就不好自己带了。而且公共空间也难免同事聊天什么的稍微会分散注意力。因此很多时候会戴着降噪耳机工作。自己在家工作的办公桌就可以自己布置,因此工作的空间也会稍微舒适一些。
我有问过公司会不会担心员工摸鱼的问题,毕竟远程处于无监管的状态。公司说选择信任员工。其实在线下办公的时候也避免不了摸鱼的问题。前面提到员工工作满意度是比较高的,没有太大的摸鱼动机。以前在线下可能什么借口(抽烟、喝奶茶咖啡)争取到一些休息的时间,现在因为时间就是自己安排的。完全可以直接休息半个小时。摸鱼其实没赚到什么。团队里也是互相协作的,如果工作量差很多应该也容易感知出来。
反正我个人的想法是保证一周有 40 个小时的工作量。我个人感知我应该是工作效率比线下工作稍微高一点点。主要来自不需要通勤了,另外自由安排工作时间后工作状态会好一些。而且我个人责任心比较重,我实际每天参与工作的时间应该会比 8 个小时多一些。
公司本身没要求加班什么的,不过我经常看到研发在晚上推代码。有的时候晚上工作群发消息也会及时回。但是这个还是看个人工作习惯了,也有的同事是下班后百分百不在线的。
这个属于理论上可以避免但是在实操中很难避免。在线下的办公的时候,通常离开公司就意味着工作状态的结束。最多也就是在微信群上偶尔回复一下消息。至少我过去几份工作都是这样的状态。
远程的时候虽然也可以做到下班时间以后完全不想工作的事。但是因为工作习惯的改变,很多时候会在晚上处理一下工作。加上晚上也会有一些工作的消息。当然也因为我本身对处理一些工作消息并不反感,因此不知不觉间一天里很多时间都处于和工作有关的状态。看看工作群消息,看看用户群的信息,关注一下行业信息。总之无形之中我的工作状态的界限就非常模糊了。有的时候好像在休息,其实也在想着一些工作有关的事。当然这个可能和我是产品经理的关系,如果是研发也许可以划分的清楚一些。
大一点的团队远程会带来一个意想不到的问题:和同事很难建立默契,会有一种“熟悉的陌生人”的感觉。大家基本上都只高效交流工作的信息。有的时候也会有一种“agent”的感觉。下午沟通好一个任务后,第二天早上做好了。大多数同事微信都没加。
所以就没有那种形成团队默契、团队文化的契机。回想起来以前在公司的时候,可能同事总有一些事情会互相开开玩笑。中午吃饭的时候也会一起闲聊一下。也会有一些小群可能吐槽一下公司,发发段子。之前塞尔达荒野之息刚发布的时候,午休我会找同事一起交流一下进度,讨论一下剧情。某部剧或者综艺大火的时候,也会一起交流一下。但是在远程里这种“无用”的沟通就几乎没有了。
公司的线下活动也就没有了,以前公司同事们有的时候会一起约着打篮球,吃火锅,爬山什么的我还是觉得挺有意思。很多同事会成为不错的朋友。
或许这就是获得某种效率和自由所必须支付的‘情感税’吧。
这可能是我个人的感受。在家办公久了,会产生一种'空间窒息感'——早上醒来是这张书桌,工作 8 小时是这张书桌,晚上休闲还是这张书桌。工作和生活的空间也重叠了。整个人好像被钉在了同一个坐标上,时间在流动,但空间完全静止。不过这个问题是在在家办公几个月后才有这种意识。
后面我意识到这个问题以后尝试做了一些行动优化。比如我下午时候我会刻意出门散步一下。阅读的时候会刻意换一个地方。
两个月前咬牙买了 Vision Pro ,意外的也优化了这个问题。每天我会戴几个小时办公,Mac 投屏到 vp 上。在 vp 上选择全沉浸场景模式,我比较喜欢海边环境的波拉岛和湖边的胡德山。这样工作间隙停顿的时候会有在自然空间里的感觉。Vp 上的这个空间的环境是一个动态视频,能看到云在飘动,听到海浪的声音。这样每天就会有切换了空间的体验,很大程度优化了工作场景单一的问题。

原来和一个独立开发的朋友聊天,他说他后面在家附近单独租了一个小办公室用来隔绝切换工作空间。可能这个问题对于长期居家办公的人还是有一些影响的。
我刻意优化这个问题以后我觉得大概是解决了 70%。我想原来线下办公没有这个问题是因为线下办公环境的白噪音太大了,同事的讨论、和同事的聊天,空间里其他人的移动。当你在思维停顿的时候有很多其他信息进入,不会太关注到静态的工作空间。但是一个人在家久了,停顿的时候会这个固定的空间就会越来越敏感。
总的来说远程工作还是有很多不可取代的优势,对于有追求的小团队完全可以试试。从信息角度来说,这是一种更高级的组织协作方式。这种组织方式本身也是一种技术红利。和线下办公相比,一样的工作时间、工资待遇下,员工的满意度和效率都会更高一些。只不过一方面的极致必然带来另一个方面的劣势,有得有失。远程的代价对于小团队来说是比较小的。
很多朋友知道我是远程工作以后都表示了极大的羡慕。我想这里面很多的“羡慕”是有点不切实际的美好幻想,就和想象的诗和远方一样。线下工作还是远程工作并不是工作的第一性的原理。远程工作从来就不是完美的乌托邦,它只是剥开了“工作”的包装盒。它剥离了通勤的疲惫、办公室的政治、以及那些为了看起来很忙而进行的‘表演性工作’。当物理的束缚消失,工作便赤裸裸地还原为最本质的模样——不是你坐班了多久,而是你交付了什么。
我们不再被公司的打卡机驱动,而是被内心的秩序感驱动。代价是必须独自面对‘原子化’的孤独,以及需要不断对抗生活与工作边界消融的混沌。真正决定幸福感的,不是在哪上班,而是你能不能建立一套属于自己的秩序。













昨天用 ChatGPT 写了一个 PopClip 插件,感觉 vibe coding 离大众并不远。
未来,编程不是程序员的专属,只要有需求,人人都可以开发属于自己的工具。
俗语“授人以鱼不如授人以渔”,希望大家有更多分享。
支持 Vision
示例 vless=192.168.1.1:443, method=none, password=23ad6b10-8d1a-40f7-8ad0-e3e35cd32291, obfs=over-tls, obfs-host=apple.com, reality-base64-pubkey=k4Uxez0sjl8bKaZH2Vgi8-WDFshML51QkxKFLWFIONk, reality-hex-shortid=0123456789abcdef, vless-flow=xtls-rprx-vision, tag=vless-tls-reality-vision-01
详细可参考 https://github.com/crossutility/Quantumult-X/blob/master/sample.conf
在 AI 与本土化双重浪潮之下,服务器操作系统正迎来历史性变革。由龙蜥社区理事长单位阿里云联合 InfoQ 打造的直播 IP 栏目《AI 进化论:智算时代操作系统的破局之路》,以云、AI、安全等技术与服务器操作系统如何融合演进为主线,聚焦服务器操作系统在智算时代的进化之路,特邀学术权威、行业专家、客户代表围绕原生智能、原生安全、软硬协同等热点议题展开深度对话。截至目前,已直播七期,线上观看人次达 60 万+。 AI 浪潮引发基础设施革命,服务器操作系统也正在迈入“(Cloud+OS)xAI”多维赋能的全新阶段。从国内外主流 OS 的差异化演进、阿里云 Alibaba Cloud Linux 4 的内核突破与性能跃升,到 “GPU 时代”的内核争议;从 OS-Copilot 的升级赋能,到 RISC-V 异构算力适配的前沿探索,操作系统的 “涅槃重生” 需要跨越哪些技术鸿沟? 《AI 进化论:智算时代操作系统的破局之路》系列直播第八期将于 1 月 22 日 14:00 开始,特别邀请到,阿里云智能集团总监、龙蜥技术委员会主席杨勇,中国科学院软件研究所高级工程师、RISC-V 行业生态负责人郭松柳,InfoQ 极客传媒策划编辑凌敏三位嘉宾,聚焦从业者核心困惑,结合龙蜥社区理事长单位阿里云 AI 增强套件、百万级服务器运维实践与 RISC-V 适配经验,深度拆解 AI 时代操系统的技术重构与价值重塑! 更多直播亮点,可点击下方海报了解,欢迎大家打开微信,扫描二维码预约直播: —— 完 ——


































































services: openlist: openlistteam/openlist:latest container_name: openlist ports: - "自定义端口:5244" user: '0:0' volumes: - /本地存储配置目录/docker/OpenList/data:/opt/openlist/data - /本地存储配置目录/docker/aria2-pro/temp/aria2:/opt/openlist/data/temp/aria2 environment: - UMASK=022 - TZ=Asia/Shanghai restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 depends_on: - aria2-pro # 单独部署aria2,因为据说后续没有aio后缀的镜像了。 aria2-pro: p3terx/aria2-pro container_name: aria2-pro ports: - "自定义端口:11445" # 不用BT所以注释 # - '6888:6888' # - '6888:6888/udp' volumes: - /本地存储配置目录/docker/aria2-pro/config:/config - /本地存储配置目录/docker/aria2-pro/downloads:/downloads - /本地存储配置目录/docker/aria2-pro/temp/aria2:/opt/openlist/data/temp/aria2 environment: - PUID=0 - PGID=0 - TZ=Asia/Shanghai - UMASK_SET=022 # 设置密码 - RPC_SECRET=123456 - RPC_PORT=11445 - LISTEN_PORT=6888 - IPV6_MODE=true # 由于配置文件是从github拉取的,所以可以通过环境变量设置代理 # - HTTP_PROXY=http://192.168.1.2:7890 # - HTTPS_PROXY=http://192.168.1.2:7890 restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 ariang: p3terx/ariang container_name: ariang network_mode: host environment: - PUID=0 - PGID=0 - TZ=Asia/Shanghai command: ["--port", "自定义端口", "--ipv6"]
restart: unless-stopped mem_limit: 1g cpus: 2 depends_on: - aria2-pro networks: defaultnet: external: true services: gitea: gitea/gitea:latest container_name: gitea ports: - "自定义端口:22" - "自定义端口:3000" volumes: - /本地存储配置目录/docker/gitea/data:/data environment: - USER_UID=1000 - USER_GID=1000 restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true services: qinglong: whyour/qinglong:debian container_name: qinglong ports: - "自定义端口:5700" volumes: - /本地存储配置目录/docker/qinglong/data:/ql/data restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true services: vaultwarden: vaultwarden/server:latest container_name: vaultwarden ports: - "自定义端口:80" volumes: - /本地存储配置目录/docker/vaultwarden/data:/data environment: - SIGNUPS_ALLOWED=false - INVITATIONS_ALLOWED=false - EXPERIMENTAL_CLIENT_FEATURE_FLAGS=ssh-key-vault-item,ssh-agent restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true services: authentik-server: ghcr.io/goauthentik/server:2025.10.3 container_name: authentik-server command: server restart: unless-stopped environment: AUTHENTIK_SECRET_KEY: 密钥 AUTHENTIK_POSTGRESQL__HOST: postgresql地址 AUTHENTIK_POSTGRESQL__PORT: postgresql端口 AUTHENTIK_POSTGRESQL__NAME: authentik AUTHENTIK_POSTGRESQL__USER: authentik AUTHENTIK_POSTGRESQL__PASSWORD: vUhJ5hGFIxvgK0 ports: - 自定义端口:9000 - 自定义端口:9443 volumes: - - /本地存储配置目录/docker/authentik/media:/media - - /本地存储配置目录/docker/authentik/templates:/templates networks: - defaultnet mem_limit: 3g cpus: 3 authentik-worker: ghcr.io/goauthentik/server:2025.10.3 container_name: authentik-worker command: worker restart: unless-stopped user: root environment: AUTHENTIK_SECRET_KEY: 密钥 AUTHENTIK_POSTGRESQL__HOST: postgresql地址 AUTHENTIK_POSTGRESQL__PORT: postgresql端口 AUTHENTIK_POSTGRESQL__NAME: authentik AUTHENTIK_POSTGRESQL__USER: authentik AUTHENTIK_POSTGRESQL__PASSWORD: postgresql密码 volumes: # - /var/run/docker.sock:/var/run/docker.sock - - /本地存储配置目录/docker/authentik/media:/media - - /本地存储配置目录/docker/authentik/certs:/certs - - /本地存储配置目录/docker/authentik/templates:/templates networks: - defaultnet mem_limit: 3g cpus: 3 networks: defaultnet: external: true services: opengist: thomiceli/opengist:latest container_name: opengist ports: - "自定义端口:6157" volumes: - /本地存储配置目录/docker/Opengist:/opengist environment: - TZ=Asia/Shanghai restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true services: hbbs: rustdesk/rustdesk-server:latest container_name: hbbs command: hbbs ports: - "自定义端口:21115" - "自定义端口:21116/tcp" - "自定义端口:21116/udp" volumes: - /本地存储配置目录/docker/rustdesk/data:/root restart: unless-stopped networks: - defaultnet depends_on: - hbbr hbbr: rustdesk/rustdesk-server:latest container_name: hbbr command: hbbr ports: - "自定义端口:21117" volumes: - /本地存储配置目录/docker/rustdesk/data:/root restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true services: glance: glanceapp/glance:latest container_name: glance ports: - 自定义端口:8080 volumes: - /本地存储配置目录/docker/glance/config:/app/config - /本地存储配置目录/docker/glance/assets:/app/assets - /etc/localtime:/etc/localtime:ro - /var/run/docker.sock:/var/run/docker.sock restart: unless-stopped environment: - TZ=Asia/Shanghai # - HTTP_PROXY=http://192.168.1.2:7890 # - HTTPS_PROXY=http://192.168.1.2:7890 networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true services: dailyhot-api: imsyy/dailyhot-api:latest container_name: dailyhot-api ports: - 自定义端口:6688 restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true services: how-to-cook: ghcr.io/anduin2017/how-to-cook:latest container_name: how-to-cook ports: - "自定义端口:5000" restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true services: sun-panel: hslr/sun-panel:latest container_name: sun-panel ports: - "自定义端口:3002" volumes: - /本地存储配置目录/docker/sun-panel/conf:/app/conf restart: unless-stopped networks: - defaultnet sun-panel-helper: madrays/sun-panel-helper:latest container_name: sun-panel-helper ports: - "自定义端口:80" volumes: - /本地存储配置目录/docker/sun-panel/sun-panel-helper/data:/app/backend/data - /本地存储配置目录/docker/sun-panel/sun-panel-helper/backups:/app/backend/backups - /本地存储配置目录/docker/sun-panel/conf/custom:/app/backend/custom environment: - BACKEND_PORT=3001 restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true services: rsshub: diygod/rsshub:chromium-bundled container_name: rsshub ports: - "自定义端口:1200" environment: - REDIS_URL=redis://192.168.1.2:6379/ - PROXY_URI=http://192.168.1.2:7890 - PUPPETEER_WS_ENDPOINT=ws://browserless:3000 - ACCESS_KEY= #密钥 - CACHE_TYPE=redis depends_on: - redis - browserless restart: unless-stopped networks: - defaultnet browserless: browserless/chrome:latest container_name: browserless ulimits: core: hard: 0 soft: 0 restart: unless-stopped networks: - defaultnet redis: redis:alpine container_name: redis volumes: - /本地存储配置目录/docker/redis/data:/data restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true services: freshrss: linuxserver/freshrss:latest container_name: freshrss ports: - "自定义端口:80" volumes: - /本地存储配置目录/docker/FreshRSS/config:/config environment: - TZ=Asia/Shanghai - PUID=1000 - PGID=1000 restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true services: rss-to-telegram: rongronggg9/rss-to-telegram:latest container_name: rss-to-telegram volumes: - /本地存储配置目录/docker/rsstt/config:/app/config environment: - TOKEN= #你的机器人token - MANAGER= #你的tgid - T_PROXY=socks5://192.168.1.2:7890 - R_PROXY=socks5://192.168.1.2:7890 - MULTIUSER=0 restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true services: wewe-rss: cooderl/wewe-rss-sqlite:latest container_name: wewe-rss ports: - "自定义端口:4000" volumes: - /本地存储配置目录/docker/wewe-rss/data:/app/data environment: - SERVER_ORIGIN_URL= #你的域名 - MAX_REQUEST_PER_MINUTE=60 - AUTH_CODE= #你的密钥 - DATABASE_URL=file:../data/wewe-rss.db - AUTH_DATABASE_TYPECODE=sqlite - FEED_MODE=fulltext - ENABLE_CLEAN_HTML=true restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true services: moviepilot: jxxghp/moviepilot-v2:latest container_name: moviepilot ports: - "自定义端口:3000" volumes: - /本地存储配置目录/docker/tr/config/torrents:/tr - /本地存储配置目录/docker/qb/qBittorrent/BT_backup:/qb - /本地存储配置目录/docker/MoviePilot-v2/config:/config - /本地存储配置目录/docker/MoviePilot-v2/core:/moviepilot/.cache/ms-playwright - # 剩下的自己加本地存储的映射 environment: - PGID=0 - PUID=0 - UMASK=000 - TZ=Asia/Shanghai - AUTH_SITE= #你的认证方式,现在似乎也可以不填,跑起来直接去网页里填 - # 对应的认证密钥 - PROXY_HOST=http://192.168.6.2:7890 - MOVIEPILOT_AUTO_UPDATE=release - PORT=3001 - NGINX_PORT=3000 restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true services: jellyfin: jellyfin/jellyfin container_name: jellyfin ports: - "自定义端口:8096" volumes: - /本地存储配置目录/docker/jellyfin/path/to/config:/config - /本地存储配置目录/docker/jellyfin/path/to/cache:/cache # :ro只读模式 - /本地存储配置目录/public/公共下载:/downloads:ro - /本地存储配置目录/public/公共下载1:/downloads1:ro environment: # 外部访问地址 - JELLYFIN_PublishedServerUrl=https://example.com # 为了刮削,添加代理 - HTTP_PROXY=http://192.168.1.2:7890 - HTTPS_PROXY=http://192.168.1.2:7890 # 调用核心显卡 devices: - /dev/dri:/dev/dri restart: unless-stopped networks: - defaultnet mem_limit: 2g cpus: 2 networks: defaultnet: external: true services: qbittorrent: linuxserver/qbittorrent:4.6.7 container_name: qbittorrent network_mode: host volumes: - /本地存储配置目录/docker/qb:/config - # 剩下的自己加本地存储的映射 environment: - WEBUI_PORT=自定义端口 - PGID=0 - PUID=0 restart: unless-stopped services: transmission: linuxserver/transmission:4.0.4 container_name: transmission network_mode: host volumes: - /本地存储配置目录/docker/tr/watch:/watch - /本地存储配置目录/docker/tr/web:/web #默认不用加,需要单独去下UI仓库的代码 - /本地存储配置目录/docker/tr/config:/config - # 剩下的自己加本地存储的映射 environment: - PGID=0 - PUID=0 - TZ=Asia/Shanghai - PEERPORT=自定义端口 - USER= #账号 - PASS= #密码 - TRANSMISSION_WEB_HOME=/web #默认不用加,有UI才需要 restart: unless-stopped services: omnibox: lampon/omnibox:latest container_name: omnibox ports: - 自定义端口:7023 volumes: - /本地存储配置目录/docker/omnibox/data:/app/data restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true services: pansou: ghcr.io/fish2018/pansou:latest container_name: pansou ports: - 自定义端口:8888 environment: - PORT=8888 - CHANNELS=tgsearchers3,Aliyun_4K_Movies,bdbdndn11,yunpanx,bsbdbfjfjff,yp123pan,sbsbsnsqq,yunpanxunlei,tianyifc,BaiduCloudDisk,txtyzy,peccxinpd,gotopan,PanjClub,kkxlzy,baicaoZY,MCPH01,bdwpzhpd,ysxb48,jdjdn1111,yggpan,MCPH086,zaihuayun,Q66Share,ucwpzy,shareAliyun,alyp_1,dianyingshare,Quark_Movies,XiangxiuNBB,ydypzyfx,ucquark,xx123pan,yingshifenxiang123,zyfb123,tyypzhpd,tianyirigeng,cloudtianyi,hdhhd21,Lsp115,oneonefivewpfx,qixingzhenren,taoxgzy,Channel_Shares_115,tyysypzypd,vip115hot,wp123zy,yunpan139,yunpan189,yunpanuc,yydf_hzl,leoziyuan,pikpakpan,Q_dongman,yoyokuakeduanju,TG654TG,WFYSFX02,QukanMovie,yeqingjie_GJG666,movielover8888_film3,Baidu_netdisk,D_wusun,FLMdongtianfudi,KaiPanshare,QQZYDAPP,rjyxfx,PikPak_Share_Channel,btzhi,newproductsourcing,cctv1211,duan_ju,QuarkFree,yunpanNB,kkdj001,xxzlzn,pxyunpanxunlei,jxwpzy,kuakedongman,liangxingzhinan,xiangnikanj,solidsexydoll,guoman4K,zdqxm,kduanju,cilidianying,CBduanju,SharePanFilms,dzsgx,BooksRealm # 必须指定启用的插件,多个插件用逗号分隔 - ENABLED_PLUGINS=labi,zhizhen,shandian,duoduo,muou,wanou,hunhepan,jikepan,panwiki,pansearch,panta,qupansou,hdr4k,pan666,susu,thepiratebay,xuexizhinan,panyq,ouge,huban,cyg,erxiao,miaoso,fox4k,pianku,clmao,wuji,cldi,xiaozhang,libvio,leijing,xb6v,xys,ddys,hdmoli,yuhuage,u3c3,javdb,clxiong,jutoushe,sdso,xiaoji,xdyh,haisou,bixin,djgou,nyaa,xinjuc,aikanzy,qupanshe,xdpan,discourse,yunsou - CACHE_ENABLED=true - CACHE_PATH=/app/cache - CACHE_MAX_SIZE=100 - CACHE_TTL=60 - ASYNC_PLUGIN_ENABLED=true - ASYNC_RESPONSE_TIMEOUT=4 - ASYNC_MAX_BACKGROUND_WORKERS=20 - ASYNC_MAX_BACKGROUND_TASKS=100 - ASYNC_CACHE_TTL_HOURS=1 # 认证配置(可选) # - AUTH_ENABLED=true # - AUTH_USERS=admin:admin123,user:pass456 # - AUTH_TOKEN_EXPIRY=24 # - AUTH_JWT_SECRET=your-secret-key-here # 如果需要代理,取消下面的注释并设置代理地址 # - PROXY=socks5://192.168.1.2:7890 volumes: - /本地存储配置目录/docker/pansou/app/cache.env:/app/cache restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true services: danmu-api: logvar/danmu-api:latest container_name: danmu-api ports: - 自定义端口:9321 volumes: - /本地存储配置目录/docker/danmu-api/config.yaml:/app/config.yaml restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true services: dockge: louislam/dockge:latest container_name: dockge ports: - "自定义端口:5001" volumes: - /本地存储配置目录/docker/dockge/data:/app/data - /var/run/docker.sock:/var/run/docker.sock - /本地存储配置目录/docker/dockge/opt/stacks:/opt/stacks environment: - DOCKGE_STACKS_DIR=/opt/stacks restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true services: portainer: 6053537/portainer-ce:latest container_name: portainer ports: - "自定义端口:9000" volumes: - /本地存储配置目录/docker/portainer/data:/data - /var/run/docker.sock:/var/run/docker.sock environment: - HTTP_PROXY=http://192.168.1.2:7890 - HTTPS_PROXY=http://192.168.1.2:7890 - NO_PROXY=localhost,127.0.0.1,::1,docker.internal restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true services: home-assistant: ghcr.io/home-assistant/home-assistant:stable container_name: home-assistant network_mode: host privileged: true volumes: - /本地存储配置目录/docker/HomeAssistant/config:/config - /本地存储配置目录/docker/HomeAssistant/ssh:/root/.ssh environment: - TZ=Asia/Shanghai restart: unless-stopped services: icloudpd: boredazfcuk/icloudpd:latest container_name: icloudpd network_mode: host volumes: - /本地存储配置目录/docker/icloudpd/config:/config - /本地存储配置目录/Goalonez/Photos/iCloud:/iCloud environment: - apple_id= #你的appid - download_path=/iCloud - icloud_china=true - auth_china=true - auto_delete=true - skip_check=true #跳过检测,处理全部文件,否则只有在有新的照片的时候才能触发删除 - notification_type=Telegram #默认不需要,通知 - telegram_token= #你的机器人token - telegram_chat_id= #你的tgid - telegram_polling=true - telegram_server= #反代tg api地址。当然你也可以直接HTTP_PROXY去走代理 - telegram_http=false - TZ=Asia/Shanghai restart: unless-stopped services: duplicati: duplicati/duplicati:latest container_name: duplicati ports: - 自定义端口:8200 volumes: - /本地存储配置目录/docker/duplicati/data:/data - /本地存储配置目录/:/sourcessd - /本地存储配置目录/backup:/backup restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true services: bili-sync-rs: amtoaer/bili-sync-rs:latest container_name: bili-sync-rs ports: - 自定义端口:12345 volumes: - /本地存储配置目录/docker/bili-sync-rs/config:/app/.config/bili-sync - /本地存储配置目录/public/videos/Bilibilis:/Bilibilis # - /本地存储配置目录/docker/jellyfin/path/to/config/metadata/People:/app/.config/bili-sync/upper_face restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true services: syncthing: syncthing/syncthing:latest container_name: syncthing ports: - 自定义端口:8384 # Web UI - 自定义端口:22000/tcp # TCP file transfers - 自定义端口:22000/udp # QUIC file transfers - 自定义端口:21027/udp # Receive local discovery broadcasts volumes: - /本地存储配置目录/docker/syncthing:/var/syncthing environment: - PUID=1000 - PGID=1000 restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true services: immich-server: ghcr.io/immich-app/immich-server:release container_name: immich_server ports: - '自定义端口:2283' volumes: - /本地存储配置目录/docker/immich/data:/data # 中文地理编码https://github.com/ZingLix/immich-geodata-cn - /本地存储配置目录/docker/immich/geodata:/build/geodata - /本地存储配置目录/docker/immich/i18n-iso-countries/langs:/usr/src/app/server/node_modules/i18n-iso-countries/langs - /本地存储配置目录/Goalonez/Photos:/Photos environment: - DB_HOSTNAME=immich_postgres - DB_PORT=5432 - DB_USERNAME=postgres - DB_PASSWORD=自定义密码 - DB_DATABASE_NAME=immich # 我是复用了rsshub的redis,请自行参考上方rsshub中的redis镜像 - REDIS_HOSTNAME=redis - REDIS_PORT=6379 # 同实例不同库 - REDIS_DBINDEX=1 - TZ=Asia/Shanghai depends_on: - immich_postgres restart: unless-stopped networks: - defaultnet mem_limit: 2g cpus: 3 immich-machine-learning: ghcr.io/immich-app/immich-machine-learning:release container_name: immich_machine_learning volumes: - /本地存储配置目录/docker/immich/model-cache:/cache environment: # 代理 - HTTP_PROXY=http://192.168.5.2:7890 - HTTPS_PROXY=http://192.168.5.2:7890 - NO_PROXY=localhost,127.0.0.1,immich - TZ=Asia/Shanghai restart: unless-stopped networks: - defaultnet mem_limit: 4g cpus: 4 immich_postgres: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:32324a2f41df5de9efe1af166b7008c3f55646f8d0e00d9550c16c9822366b4a container_name: immich_postgres ports: - '5432:5432' volumes: - /本地存储配置目录/docker/immich/postgresql/data:/var/lib/postgresql/data environment: - POSTGRES_PASSWORD=自定义密码 - POSTGRES_USER=postgres - POSTGRES_DB=immich - POSTGRES_INITDB_ARGS=--data-checksums - TZ=Asia/Shanghai restart: unless-stopped networks: - defaultnet shm_size: mem_limit: 3g cpus: 2 networks: defaultnet: external: true services: lucky: gdy666/lucky:latest container_name: lucky network_mode: host volumes: - /本地存储配置目录/docker/lucky/luckyconf:/goodluck restart: unless-stopped services: mihomo: metacubex/mihomo:latest container_name: mihomo ports: - "自定义端口:7890" - "自定义端口:9090" volumes: - /本地存储配置目录/docker/mihomo/metacubexd:/metacubexd #默认不用,图形化界面需要单独去git拉代码映射 - /本地存储配置目录/docker/mihomo/config:/root/.config/mihomo restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 从鼠鼠因逆向教务系统,被校方误以为网络攻击 (马上要报警),差点被记过继续讨论:
佬友的这个帖子让我想起以前本科的一些类似的有趣事情。
第一件事是我参加比赛认识的一个师弟干的。
他在参加某比赛的时候在宿舍用校园网去爬了某政府网站上的统计数据,刚开始爬的当天下午学校网管和警察就直接敲开他的宿舍门了。
该政府网站的工作人员认为收到了网络攻击,于是找了网警,网警定位到了 IP 是我们学校,打电话找学校网管,因为没有做任何遮掩,所以学校网管直接定位到宿舍然后上门了。
后面是因为理由正当,没有造成严重后果,口头警告一下就过了。
这件事对当时我的我造成了很大冲击,因为我当时正在参加学院和某企业合作的一个项目,通过爬各种新闻网站、论坛的评论区来做舆情分析。虽然这个项目有一定政府背景,但当时我写爬虫测试的时候都是用的自己的电脑,唯一想到要用代理池的原因是爬太多被封 IP 不能继续测试…
我一个不太靠谱的师兄在拉我们进这个爬虫项目的时候信誓旦旦地说,学会了爬虫就不怕吃不饱饭了,因为他有一个同学,毕业之后靠写爬虫爬数据去卖,一天能赚 100 多。我一开始还傻傻觉得挺有道理。后面想起来,觉得这只是当时的法规不成熟,放现在分分钟出事。
结合佬友的故事,各位同仁学、用爬虫的时候需谨慎。
第二个事情是想吐槽一下高校纸糊一样的网络系统。
我们本科的时候有一门忘记干嘛的公选课,第一天上课老师就让我们要经常登录某个学校部门自己搭的网站,学期末的时候会根据登录次数来算平时分。
我们研究之后发现那个网站的登录系统完全是纸糊的,除了账号密码之外不做任何校验,甚至连登录都是一次性的,就是它不记录你的登录状态,你关闭网站再打开就是注销状态了。
为了刷登录次数,我有同学用脚本精灵做了个脚本去点。我则用 python 写了个代码去刷,经历了第一件事之后,我还专门把登录间隔设大一点,爬刷出问题。后来发现完全没有关系,系统完全不在乎这些事情。
想起来挺好笑的。
定制性很高,可以自定义各种指纹值和更换条件,开源项目地址:
检测地址:
官方于 2026.1.7 更新了 0.8.86 版本,新增了 websearch 功能
昨天发现了后 火速研究,火速添加
kiro 的搜索超级快 貌似有缓存,数据没这么新
而且官方的搜索甚至还有思考和加密,kiro 的体验还是赶不上官方的
实现可参考:feat: 新增 websearch 工具支持・hank9999/kiro.rs@0d66014・GitHub
支持功能:
| 功能 | 说明 | 触发时间 (北京) |
|---|---|---|
| 每日签到 | 自动完成签到任务并领取积分 | 8:00 |
| 每日评论 | 在随机漫画下发表评论 | 9:30 |
| 每日阅读 | 自动阅读漫画 | 10:00 |
| 每日抽奖 | 完成任务并自动抽奖 | 11:00 |
| 积分领取 | 任务完成后自动领取积分 | 随任务执行 |
全新版本,可能有点问题(但我目前没发现)如果有的话麻烦佬友提 issue 或者 pr 了
大致使用就是接入 OIDC 后,
首先新建渠道
然后创建个配置,定义一下模型输入和输出格式就好
然后添加以下渠道
如下是一些配置项:
Cursor 自带的 Opus-4.5 带 thinking 的模型名称为
claude-4.5-opus-high-thinking
不带 thinking 的叫
claude-4.5-opus-high
其中响应处理器 [“thinkingTags”] 的作用是将响应的 reason 转为 content 中的 … ,如此就能在 Cursor 中展示思考内容
仓库地址:GitHub - NickJerome/tiny-ai-api-hub
虽然最后的目标是想实现 Claude Code 也可用(测了下好像可以,但是感觉哪里怪怪的)