WWW.YOUINFO.SITE
标签聚合 下面

/tag/下面

LinuxDo 最新话题 · 2026-06-11 17:33:51+08:00 · tech

NewAPI 的日志目前是单表存储,已经看到太多佬友因为日志撑爆磁盘了,下面给出一种解决方式,可能不完全兼容,但是个人测试下来没有什么问题 与 NewAPI 版本无关,基本所有版本都可以用,我用的版本是 1.0.0-rc.10 自带的日志删除 最常用的是使用 NewAPI 自带的 “清理历史日志” 来进行删除 // 代码逻辑如下 // 直接按照时间戳删除 LOG_DB.Where("created_at < ?", targetTimestamp).Limit(limit).Delete(&Log{}) 这里有两个问题: Delete 的效率不高,或者说在数据量过大的情况下使用 Delete 带来的 IO 可能成为灾难 Delete 之后磁盘空间并不会回收,需要手动回收 通过数据库分片解决日志删除 适用于 MySQL,如果您是其他的 DB 如 Postgres / SQLite,将下面的内容提供给 AI 相信也会有对应的解决方案 分片的核心逻辑是,将日志拆分到对应的日期上,比如分片 logs_20260601 只存储当天的数据,在超出需要删除的日期后,比如 1 个月后的 2026/07/01,直接删除 logs_20260601 分片,分片占用的空间会立刻释放,对应的日志数据也会直接删除 不过这里要提示您,所有的 DB 变更都可能引入风险,请您在执行前通过 mysqldump 或者类似工具,导出完整的数据结构和数据内容,确保执行出现异常可以随时回滚 执行下面的步骤前,建议停机,否则可能导致数据不完整 ,如果数据完整性不在考虑范围内,也可以在线更新 Step 1 检查数据符合预期 (Read) 执行下面的查询语句,确保 count 为 0,即所有的日志的创建时间不为空 SELECT COUNT(*) AS null_created_at_count FROM logs WHERE created_at IS NULL; Step 2 创建临时表 (Write) CREATE TABLE logs_new LIKE logs; Step 3 添加准备分区语句 (Read) 通过下面的 SQL,可以获得一个建表 SQL,对 DB 无任何副作用,可以放心执行 下面的 @start_date 和 @end_date 两行,可以按照您的实际数据存储情况调整,下面的配置为创建 180 天前到 7 天后的分区,如果您的日志已经回收或删除过了,可以考虑缩减分区数量 SET time_zone = '+08:00'; 这里可以按照您的需求调整为具体的时区 分区必须提前创建,否则插入数据会有问题 ,所以您至少需要创建 7 天后的备用 SET SESSION group_concat_max_len = 1024 * 1024; SET time_zone = '+08:00'; SET @start_date = DATE_SUB(CURDATE(), INTERVAL 180 DAY); SET @end_date = DATE_ADD(CURDATE(), INTERVAL 7 DAY); WITH RECURSIVE dates AS ( SELECT @start_date AS d UNION ALL SELECT DATE_ADD(d, INTERVAL 1 DAY) FROM dates WHERE d < @end_date ) SELECT GROUP_CONCAT( CONCAT( ' PARTITION p', DATE_FORMAT(d, '%Y%m%d'), ' VALUES LESS THAN (', UNIX_TIMESTAMP(DATE_ADD(d, INTERVAL 1 DAY)), ')' ) ORDER BY d SEPARATOR ',\n' ) INTO @parts FROM dates; SET @sql = CONCAT( 'ALTER TABLE logs_new MODIFY `created_at` bigint NOT NULL, DROP PRIMARY KEY, DROP INDEX `idx_created_at_id`, ADD PRIMARY KEY (`id`, `created_at`) PARTITION BY RANGE (`created_at`) ( ', @parts, ', PARTITION pmax VALUES LESS THAN MAXVALUE )' ); SELECT @sql; Step 4 执行分区语句 (Write) 执行上一步输出的 SQL,会将新的 logs_new 表调整为分区表 Step 5 导入旧的数据 (Write) 取决于您的数据量,这一步可能会花费一些时间 INSERT INTO logs_new SELECT * FROM logs; Step 6 校验数据已经导入完成 (Read) 如果您是停机更新,确保两条 SQL 输出的内容是一致的 如果您是在线更新,确保数据接近或一致 SELECT "logs" as `table`, COUNT(*), MIN(created_at), MAX(created_at) FROM logs UNION SELECT "logs_new" as `table`, COUNT(*), MIN(created_at), MAX(created_at) FROM logs_new; Step 7 确认分区 (Read) 下面的 SQL 会打印新表的所有分区,以及每个分区的数据量 SELECT PARTITION_NAME, PARTITION_DESCRIPTION, TABLE_ROWS FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'logs_new' ORDER BY PARTITION_ORDINAL_POSITION; Step 8 切表 (Write) 切换流量到新表,执行完成后请检查 NewAPI 各组件各页面是否能正常工作,特别是依赖日志的内容 RENAME TABLE logs TO logs_old, logs_new TO logs; Step 9 创建自动回收创建/分区任务 (Write) MySQL 不会自动创建或者删除分区,需要您创建定时任务来实现,下面会给出创建/删除分区的任务,您可以按需添加 Step 9.1 开启 MySQL Event Scheduler 在数据库中执行下面的命令,通常需要 root 用户,无需重启 SET GLOBAL event_scheduler = ON; SHOW VARIABLES LIKE 'event_scheduler'; 在配置文件的 mysqld 章节,增加下面的配置,无需重启 这一步是为了保证,即使后面重启数据库,Event Scheduler 仍然会是开启状态 [mysqld] event_scheduler=ON Step 9.2 创建新建分区任务 下面的两个 SQL 都需要执行 第一个 SQL 中的 SET time_zone = '+08:00'; 可按需修改为您的时区 第二个 SQL 中的时间您可以修改为适用于您的服务的时间,目前设置的是每天的 02:00,用于控制定时触发的时机 DELIMITER $$ DROP PROCEDURE IF EXISTS sp_logs_create_future_partitions$$ CREATE PROCEDURE sp_logs_create_future_partitions() BEGIN DECLARE v_i INT DEFAULT 0; DECLARE v_d DATE; DECLARE v_partition_name VARCHAR(32); DECLARE v_less_than BIGINT; DECLARE v_exists INT DEFAULT 0; DECLARE v_sql TEXT; SET time_zone = '+08:00'; WHILE v_i <= 7 DO SET v_d = DATE_ADD(CURDATE(), INTERVAL v_i DAY); SET v_partition_name = CONCAT('p', DATE_FORMAT(v_d, '%Y%m%d')); SET v_less_than = UNIX_TIMESTAMP(DATE_ADD(v_d, INTERVAL 1 DAY)); SELECT COUNT(*) INTO v_exists FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'logs' AND PARTITION_NAME = v_partition_name; IF v_exists = 0 THEN SET v_sql = CONCAT( 'ALTER TABLE logs REORGANIZE PARTITION pmax INTO (', 'PARTITION ', v_partition_name, ' VALUES LESS THAN (', v_less_than, '), ', 'PARTITION pmax VALUES LESS THAN MAXVALUE', ')' ); SET @sql = v_sql; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END IF; SET v_i = v_i + 1; END WHILE; END$$ DELIMITER ; DROP EVENT IF EXISTS ev_logs_create_future_partitions; CREATE EVENT ev_logs_create_future_partitions ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP(CURRENT_DATE, '02:00:00') DO CALL sp_logs_create_future_partitions(); Step 9.3 创建删除分区任务 (可选) 这个是用于替代 NewAPI 自带的删除数据任务,如果您有需要可以配置这里的自动删除 第一个 SQL 中的 INTERVAL 180 DAY 表示删除 180 天之前的数据,可以按需修改, SET time_zone = '+08:00'; 也可按需修改为您的时区 第二个 SQL 中的时间您可以修改为适用于您的服务的时间,目前设置的是每天的 03:00,用于控制定时触发的时机 DELIMITER $$ DROP PROCEDURE IF EXISTS sp_logs_drop_old_partitions$$ CREATE PROCEDURE sp_logs_drop_old_partitions() BEGIN DECLARE v_cutoff_date DATE; DECLARE v_cutoff_ts BIGINT; DECLARE v_drop_partitions TEXT; DECLARE v_sql TEXT; SET time_zone = '+08:00'; SET v_cutoff_date = DATE_SUB(CURDATE(), INTERVAL 180 DAY); SET v_cutoff_ts = UNIX_TIMESTAMP(v_cutoff_date); SELECT GROUP_CONCAT(PARTITION_NAME ORDER BY PARTITION_ORDINAL_POSITION) INTO v_drop_partitions FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'logs' AND PARTITION_NAME REGEXP '^p[0-9]{8}$' AND CAST(PARTITION_DESCRIPTION AS UNSIGNED) <= v_cutoff_ts; IF v_drop_partitions IS NOT NULL AND v_drop_partitions <> '' THEN SET v_sql = CONCAT( 'ALTER TABLE logs DROP PARTITION ', v_drop_partitions ); SET @sql = v_sql; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END IF; END$$ DELIMITER ; DROP EVENT IF EXISTS ev_logs_drop_old_partitions; CREATE EVENT ev_logs_drop_old_partitions ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP(CURRENT_DATE, '00:10:00') DO CALL sp_logs_drop_old_partitions(); Step 9.4 检查任务 show events; SHOW PROCEDURE STATUS WHERE Db = DATABASE(); Step 10 大功告成 一切已准备就绪,请使用吧!数据库将按照您的配置自动创建新的分片,回收旧的分片,后续如果有调整,也可以直接修改 SQL 配置再次执行。 您可以定期通过下面的 SQL 来检查分区任务的运行状态和分区的数据量,请检查 pmax 分区数据量为 0,且已经创建了 7 天后的分区 SELECT PARTITION_NAME, PARTITION_DESCRIPTION, TABLE_ROWS FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'logs' ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 15; 1 个帖子 - 1 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-11 17:23:02+08:00 · tech

先叠个甲,下面的内容不针对任何具体对象,我自己也是个刚加入不久的菜鸡。就是感觉最近论坛新面孔变多了是好事,但社区的“空气”也逐渐有了变化,所以随便唠两句。 借用日语里“阅读空气”的概念,希望大伙发帖前建议先感受下社区的氛围和“潜规则”。最近有些帖子在标题上我就能猜到马上会有老哥开怼,而且结果基本也都是这样。 这并不是说谁做错了什么,但我还是希望发帖和讨论最好还是把焦点放在“话题和问题本身”,而且从始至终都应该朝这个方向引导。 举个例子,对论坛发展有想法很正常,大可以把 始皇 抽象成一个“社区决策者”的角色,从成本、合规或者生态这些维度去理性探讨。但如果跳过中间的客观逻辑抽象,直接变成“听我的,直接XXX”的话,这就挺没劲的,点进去压根没什么信息,稍微直接一点的佬友可能就开始攻击了。 所以,多聊聊事情(话题)本身,大伙讨论的“空气”才能更健康。 阅读空气,从标题开始,贯穿于你发的每句话。 1 个帖子 - 1 位参与者 阅读完整话题

LinuxDo 最新话题 · 2026-06-10 14:57:17+08:00 · tech

这几天刷帖子 看到下面的评论 都发现佬友们都很厉害 高考都是600+ 真的狠狠羡慕了 本人愚钝 19年高考 用的全国II卷(简单的那套) 就这也才刚刚考了502(胶水) 勉强上了个双非 现在依旧记得英语考了64.4分(总分0.4还抹去了&英语单词我是真记不住 不过也是我懒) 语文也才85分 这两科真的太痛了 理综生物当年也没发挥好 依稀记得有一道题花的时间过于长了 乱了节奏 当年考完原本想着要不要复读一年 提一提英语成绩 不过后面也就不了了之了 后面20年高考推迟1个月 现在偶尔回想起来 如果当年复读一年是不是会不一样的现在 不过谁还没有遗憾呢 现在就已经不错了 各位佬友们当年都考多少啊 说出来让我狠狠羡慕一下吧 5 个帖子 - 4 位参与者 阅读完整话题

v2ex · 2026-06-09 17:39:05+08:00 · tech

在我发布的第一个介绍 Cent 记账 的视频下面,问得最多的一个问题是,在哪里可以下载呢?没办法,Cent 作为一个 PWA ,本来是完全不需要下载的,但是如今的应用生态中,Web 天生低人一等,各家手机厂商防贼一样防着浏览器,如果不出一个详细教程,初次了解的人根本学不会怎么把一个 PWA 安装到桌面上。因此,我决定做一个 iOS 原生版 Cent 。 至于为什么是 iOS ,原因也很简单,几年前我就开通了 Apple Develop Program ,本来打算做一些小玩具练手,但因为懒,也一直没有动手,白白花了好几年的订阅费用。对比 Android ,iOS 生态的好处显而易见,完善的全球上架流程,一致的硬件架构,不需要考虑各种适配问题,比起国内安卓市场那堪比规则怪谈的上架机制,不选 iOS 简直天理难容。 我从一开始就决定完全通过 Vibe Coding 来进行开发,因为如果要让我从头开始学习一门其他语言开发,了解那些犄角旮旯里的不知名 API ,对于如今改个样式都恨不得让 AI 来做的我来说,几乎是不可能的。一旦尝过了 AI 的甜头,要想回归手写代码的时代,那就太难了。 最难的第一步 对于 Vibe Coding ,最难的一步不是想做什么,而是决定做哪些,怎么做。对我而言,最大的难题是如何选型。一方面,尽管我已经决定了要做 iOS 端,但是也不意味着完全放弃 Android 端。另一方面,对 AI 而言,代码技术也是有熟悉程度的,JS 和 Python 对于 AI 是小菜一碟,但其他领域就不一定了。为此,我跟 Gemini 掰扯讨论了很久。 一般我会先用网页版 Gemini 沟通自己的想法,我认为 Gemini 的最大优势在于搜集信息,背靠 Google 这个搜索引擎,找它问问题是十分自然的事情,关键是 flash 量大管饱,对于要求不高的任务,直接问 Gemini 比 AI Agent 省事得多,不然一言不合就开始“让我先了解项目结构”,白花花的 token 就这样扔给了文件系统,造孽啊。 这一次找 Gemini 问完,它推荐了我一个此前我从未听说过的开发技术,KMP(Kotlin Multiplatform),根据介绍,它可以将核心操作逻辑复用一套 Kotlin 代码,通过不同的 UI 技术适配不同的平台,在 Android 上用 Compose ,在 iOS 上用 Swift UI ,简直是我的梦中情码,精准命中了我的所有需求。于是我当即决定用 KMP 进行开发。 然而,我完全低估了 KMP ,它就像一个禁忌之海,海面上是诱人的阳光和云朵,海风吹着跨平台的美梦在你的耳边低语,但是你一旦踏入,臃肿、沉重、深不见底的 Gradle/Maven 平台就会像漩涡般瞬间把你的心智吸入,IDE 上不计其数的按钮,讳莫如深的术语,就像克苏鲁身上不可名状的眼睛一样,让你的 san 值直接清空。一想到我还试图在 Gemini 调查员的帮助下深入这座散发着诡异黄光,飘洒着 warning/loading 碎屑的古神小镇,我就止不住的后怕。 当我发现,无论是 Gradle 古神低语般的配置语法,还是诡异的平台适配装饰器代码,以及深不见底的项目文件夹目录结构,我都完全无法理解的时候,我仅剩的理智拉住了我。Vibe Coding 本身就已经很黑盒了,如果再接入一套黑盒(对我而言)的开发架构,最终开发的产物简直不敢想象。因此,即使那句大名鼎鼎的“忘掉代码,只看结果”的 Vibe Coding 准则一直挂在我的心里,但我还是没有勇气完全对自己“产品”的代码不管不顾,最终,我放弃了 KMP 。 我决定先专注于 iOS 一个平台,此前我了解过 Swift UI ,尽管不多,但我相信我能在关键时刻拉下刹车,至少不至于在 plan mode 时对产出的方案一头雾水,然后无脑选择 Accept all 。虽然这不符合纯粹 Vibe Coding 的定义,但事实证明后来我的选择是正确的。 渐进式开发 Cent 虽然是一个纯粹的 Web SPA ,用的都是 Web 开发中十分基础的技术,React ,Zustand ,没有什么黑科技,但是要想一句话让 AI 照着 Cent 原模原样复制一个 iOS 版出来,以现在的 AI 能力还做不到,因此必须拆成一系列小步骤,一步一步来。 得益于 Cent Web 版本身解耦做的比较充分,我拆起任务来也比较得心应手。Cent 的核心同步机制,我称之为 Tidal ,是一个纯粹的数据操作,不绑定任何特定数据库实现,因此,我首先让 Claude 帮我对 Tidal 进行迁移,先按照 Tidal 的机制做一个小 demo ,能够成功执行增删查改即可。 当然,为了让 Claude 更好的理解 Tidal 的同步机制,我不得不为整个 Tidal 代码补上完整的注释和文档,详细说明每一个步骤,每一个函数抽象出来的意义,本来这部分应该在 Tidal 诞生时就做完的,但是因为懒一直拖着,也算是为之前的工作收尾了。对于 Claude 来说,有原始代码和文档,迁移到其他语言非常简单,几乎只用了一个下午,我就得到了可用的原型。 为什么不让 Claude 自己来拆解任务和文档?我曾经试过让 Claude 自己了解 Tidal 相关的实现,但是最终效果并不好,在代码中有一些 edge case ,需要特殊处理,以及部分兼容性代码,在新的代码中已经不需要了,让 Claude 自己分析并不能很好地识别出这些代码意义,还是需要我手动补充文档,这样下来不仅耗费了更多的 token ,我干的活也一点没少,后来我还是选择老老实实补全文档,把每一个场景都写清楚,最终得到的结果也不负我的期待,并且,这些文档还可以用于指导后续其他平台的移植,磨刀不误砍柴工嘛。 抽卡成功 就这样,从核心同步机制开始,我一点点地把 Cent 的全部功能和 Claude 一起搬到 iOS 上,记账页面,搜索页面,统计页面,设置页面,iOS 的功能一点点补齐了。但是在测试过程中,我也发现了一个十分严重的问题,在账单数据较少时,App 运行一切正常,但是当我用真实的账本(约 1w 条)测试时,App 突然变得十分卡顿,使用原生的代码运行,却比 Web 端性能更差,令我十分意外,于是我不得不再一次违反不要看代码的“准则”,看了一眼当前的代码,两眼一黑。 我知道,Claude 偷懒了,它一直在用写 Demo 的思路写后续的功能,所有的数据变动全往一个 appState 里塞,几个页面的数据变动全部耦合在一起,虽然我不太懂 Swift UI 的状态管理,但也能意识到出了大问题。尽管之前我有意识地让它多考虑性能,多考虑耦合度,但是积重难返,可能是某次方案里我没怎么细看,直接说了句开干,后面的代码就像脱缰野马一样,撒欢跑的谁也不认识了。 我让 Claude 自己分析性能问题的原因,它也老实说了,核心状态管理七八百行代码,纯纯屎山代码,各个页面直接本来没有任何关系,但是数据更新全放在一个 class 里,每次干点什么操作不知道哪里触发了更新,就要反序列化 1w 多条数据,不卡才有鬼了。这下我不放心让 Claude 自己改了,找来隔壁的 Codex ,请 GPT5.5 喝了杯茶,看它洋洋洒洒列出一大摞优化建议,说的有鼻子有眼的,虽然我依旧不懂这样做能不能治本,但是没关系,反正有 Git 回档大法,这卡先抽了再说。GPT5.5 十分给力,将近 50 个文件几百次改动,还写了个脚本用来批量替换,吭哧吭哧干了一下午,我都觉得心疼,总算是改完了。最终测试结果不负我望,性能问题消失了,虽然没有经过严格的测试,但是同样的账单数据下,卡顿彻底消失了,我总算松了口气。 没有 Harness 就是最好的 Harness Harness 的概念最近很火,名词一套接一套的,实际上就是试图给 AI 定个框架,让它在这个框架里干活,避免搞出问题来。因此我也在想,如果一开始我也能把“Harness”做好,Claude 是不是就不会整出这么大的幺蛾子来呢?但马上我就放弃了,对我来说,Swift 开发本来就不是我熟悉的领域,让我给 Claude 定规则,就像关公面前耍大刀,自不量力。 整个项目里说得上 Harness 的东西,就是一开始我给 Claude 制定的“记忆”守则,我在创建项目的时候就告诉 Claude ,我的目标是把整个 Cent Web 项目完整地移植到 Swift 中,这是一个十分巨大的目标,因此必须要一步一步来,Claude 需要制定一个精准的 README ,然后每一次移植都把这次做了些什么写进 memory.md 中,非常古老且粗糙的做法,但对我来说足够了。每次对话前,我就把 README 先塞进聊天框中,Claude 就会按照之前的做法完善 memory ,如果有比较重大且成体系的改动,例如多语言适配方案、快捷指令之类的,我就让它重新编写一份单独的指导文档。这样的好处是非常省 token ,很多时候一些小功能改进、UI 修改等,没有必要让 Claude 去读完整个项目的架构文件,只需要专注于一个或者几个文件即可,塞入太多东西到 claude.md 中不仅昂贵,还会拖慢 coding 的速度,没有必要,按需读取才是兼顾效率和划算的选择。 找回乐趣 不得不说,Vibe Coding 真的会让人上瘾,尤其是当成果慢慢变成你心目中的样子的时候,成就感会一点点放大,本来自己手写代码也能达到一样的效果,但是 Vibe Coding 把这个时间压缩了几十倍。放在两年前,要将一个 Web App 全部转成纯血 Swift UI ,让我自己来干,学习的时间不说,光敲代码就要消耗了不少时间,还要费劲心力去了解各个 API 的用法,各种新的“最佳实践”,我还记得之前写试手 app 的时候,为了实现一个 UI 效果,在 Google 、Youtube 、B 站上来回搜索,对着视频敲代码,现在只要说句话,说清楚一点,就能实现自己想要的效果,效率高了不止一点。一次不满意还可以重抽,只要是能够实现的,总能抽出来满意的结果,Vibe Coding 像抽卡果然名不虚传。 哪怕是等待 Claude 编写代码的简短空隙里,我都抑制不住脑子里疯狂涌出的奇形怪状的 idea ,恨不得挨个让它给我实现一遍,连喝口水上个厕所的时间都在想着,怎么让 Claude 再多干点活,整个人已经完全变成黑心老板的形状了。 那么,代价是什么 耗时将近两个月,我终于完成了整个 iOS Cent App 的开发和上架,准确的说,是在 Claude Opus 4.7 + Chat GPT 5.5 + Cursor Compser 2.5 的帮助下完成了开发,除了代码开发之外,我还用 Claude 帮忙编写了 Cent iOS 发布后的一个简易宣传视频,现在在 B 站搜索 Cent iOS 版看到的视频就是由 Claude 编写而成,我只负责寻找 BGM 和录制屏幕。 而在这场看起来光鲜亮丽,轻松写意的 Vibe Coding 背后,是 Token 在不断燃烧,我做了粗略的统计,仅仅只计算我的真实支出项目,Cursor + Claude Pro + ChatGPT Pro (全部用光每月额度,Cursor 甚至连 auto 也用到不能再用了),合计订阅费用就已经来到了$400 ,还没有算各种薅羊毛、注册新用户拿免费 Kiro/中转站月订阅省下来的钱,在这样的情况下,即使不算 App Store 开发者$99 年费和抽成,按照目前的 Cent iOS 版定价,也需要至少卖出 100 份才能勉强回本。从上架后的情况来看,达成这个最低目标都算遥遥无期。 这划算吗,我觉得还行,尽管从投入产出比来看,Vibe Coding 的经济效益非常低,但是它给了我一次从无到有的 App 上架体验,我第一次成功上架并且卖出了我的第一个作品,这对我意义重大,而且只花了两个月的时间。对于任何产品而言,难的都不是做出来,而是卖出去,在没有任何营销,单纯靠自己卖吆喝的情况下,能卖出去我就已经感到非常惊喜了。 Cent 在诞生之初就是个人特色十分强烈的作品,有很多地方刻意不去迎合市面上的主流记账软件,例如资产管理等等,因此在 Github 收获超千 k star 的时候,我都感觉十分意外,决定开发 iOS 版,也是为了证明 Tidal 的潜力,不想让这套同步机制埋没在浏览器限制之中。在决定 Vibe Coding 前,我也曾对 AI 的能力边界有过高过低的期待,一方面作为程序猿,我担心 AI 会抢走我的饭碗,另一方面我也好奇 AI 究竟能做到何种程度。但是实际体验下来,尽管我确实没有手写哪怕任何一行代码,但我开始对自己有了更多的信心。 AI 绝不是万能的,如果只给一句话,让 AI 直接复刻一个完整的 iOS 版本出来,它是绝对做不到的,或者说绝无可能做到现在这样的程度,Vibe Coding ,更像是 Vibe Deciding ,Coding 反而是最不重要的一环,重要的是挑选、验证,要做什么,不做什么,等着 AI 问你这样做行不行,如果有一天 AI 真的到了一句话就能抽出完美的结果的地步,那这绝对不是一件坏事,在这之前,至少我认为我自己,还不至于完全被取代,如果 AI 有一天真的消灭了工作,那才是大好事呢。

LinuxDo 最新话题 · 2026-06-07 22:26:57+08:00 · tech

从下面帖子接着讲 Mox Bank 疑似即将开放内地访港旅客开户 前沿快讯 如题,Mox Bank 近日于官网上线了“訪港旅客常見問題”的FAQ页面,疑似即将开放内地访港旅客开户。 对于内地访港旅客,需使用同名的香港或内地银行户口,进行一笔最少 1000 HKD/950 CNY/130 USD 的同名转账至 Mox 户口完成激活,在完成同名转账前,部分交易将设有限额,部分交易限额则为 0。 同时,内地居民开立的 Mox 户口无法使用 Mox Credit、Mox In… 奇技淫巧:使用 Trip.com 员工专属链接拉起 Mox Bank 隐藏的内地居民开户入口 前沿快讯 从 Mox Bank 疑似即将开放内地访港旅客开户 接着讲 [photo_2026-06-07_12-53-23] [photo_2026-06-07_12-53-24] [photo_2026-06-07_12-53-25] [photo_2026-06-07_12-53-26] [photo_2026-06-07_12-53-28] 如题,扫描图 1 二维码或使用 Chrome 浏览器开启链接… 据多例 DP,如未使用已登记的以 @trip.com 结尾的电子邮箱进行开户,在填写完信息后则会直接被拒绝。 同时,由于 Mox Bank 对于所有未完成的在线申请均保留 90 天,因此存在如果 90 天内即开放所有访港旅客开户,却因本次留有记录,无法新开户的情况。 转自encmasuta 1 个帖子 - 1 位参与者 阅读完整话题