令人焦头烂额的 AI 编辑器

今天的工作任务毫无悬念就是调研那个 AI 编辑器,首先都把目光放在了 TipTap,有两款 AI 写作的竟品都在使用这款编辑器,它的迭代比较快,对 React 也有较好的原生支持,工具栏等组件都可以自定义,核心框架完全开源可商用。

但是想要使用它的拖拽排序功能以及原生的数学公式支持,是需要购买 Pro 授权的,虽然他的官网说是免费版也可以使用 Pro 插件,但是我注册账号之后通过私有 NPM 源请求安装它的私有包失败了,在同事的确认下,最终得到一条冷冰冰的提示,就是请升级您的授权!这不妥妥的骗人吗!

下午三四点又拉了一个会讨论,我们把目标放在了第二个选择 EditorJS 这款编辑器,也是维护良好的一款开源项目,交互形态类似,它所有功能完全免费,仅支持捐助。不过在实际创建 NextJS 的 Demo 后,发现它扩展插件使用的 Class,并且基本上都是原生技术。而我也并不知道如何完美使用 TypeScript 进行编码上的提示,如果想要认真打磨,估计还需要花费不少心思。短短一个星期,我不认为用它可以搞定...

于是目光又回到了 TipTap 上,但这款编辑器呢还是需要想办法将 Markdown 转换成 HTML 才可以使用,它本身也有支持 Markdown 导入的,但依旧也是付费,于是这块就只能自己做了。并且 UI 方面依旧是手搓,我还是不见得一周就能完整上线这个东西。

总的来说,这两款编辑器各有各的坑。下面我直接把它们的优缺点都列出来吧,无论最终什么时候做完,肯定是要照样做的,目前的计划还是继续使用 TipTap。

  • TipTap

    • 内置完整的 React / Vue 集成方案,无需额外处理可直接使用
    • 核心框架免费开源,部分扩展功能需要付费
    • 无内置 UI 样式,需要自行编写或参考 Demo 代码修改
    • 支持自行扩展语法,编写扩展渲染 React 组件
    • 默认仅支持 HTML 形式导入(你需要自行处理其他的兼容和转换
    • 拖拽、AI 工具等为收费功能
    • AI 工具为内部集成,甚至你并不需要自己接入后端
  • EditorJS

    • 默认不支持渲染 React / Vue 组件,需要自行封装和扩展
    • 完全免费开源,无功能限制,无隐性付费项,维护情况良好
    • 内置 UI 样式,可直接扩展功能而不需要自己编写
    • 编写插件的形式偏原生,扩展功能没良好的 TypeScript 支持(也可能是我不会用)
    • 默认使用 JSON 形式导入,也需要自行转换格式
    • 无 AI 工具等集成,均需要手动编写

开始 996 模式了...

上午老大宣布从今开始 996 模式,为了尽快上线 Felo Search 产品的新功能,提高转化数据和用户付费率,也是为了后续拉到融资。就是牺牲了个周六,感觉接下来我的睡眠时间打折更加严重了...

不知道为什么今天在外面吃饭特别香,比中午更有食欲。晚饭后也就做完了暗夜模式的适配,回去之后就是一顿呼呼大睡,10 点直接睡到快 12 点。看一会手机视频到 1 点,洗完澡吹完头发,再玩一下原神就 2 点半了,凌晨的时间过的就是快!再稍微修一下小窝前台 Nuxt 发现的问题,三点了!

编辑在读内容发现个 Bug,我想删除成空白内容,结果却并没有写入数据库,感觉是因为传入空被过滤掉了!这样的问题要如何解决啊。

详情

Vite 引入源码打包的依赖问题 / useSyncExternalStore 的使用

今天的工作继续研究哪个 simple-mind-map 的使用,想把它的主题功能引用过来,和之前一样依旧是在打包方面犯了难。我问了这方面更熟悉的 @Akr 大佬,他看到文档提示说该项目并没有做打包(其实我也看到了,作者说是旧版本,就无视了),而是在 NPM 包直接分发了源码(其实依旧是这样)。而在其提供的 Demo 中,使用了 Vue 的 transpileDependencies 对其进行了处理。Vite 有一个类似配置,叫 optimizeDeps.include,我试了下,并不管用。

@Akr 让我试试修改包的内容,于是查阅了相关的文章《如何优雅的修改第三方依赖?pnpm patch 实现》,修改完包 type: "module" 调整类型之后,出现了找不到依赖文件的错误。

Cannot find module '/Users/paul/Documents/项目/remix-shadcn-ts/node_modules/.pnpm/[email protected]_patch_hash=pgdwjd5fqkfded3jxct2r3p6mi/node_modules/simple-mind-map-plugin-themes/src/dark/index' imported from /Users/paul/Documents/项目/remix-shadcn-ts/node_modules/.pnpm/[email protected]_patch_hash=pgdwjd5fqkfded3jxct2r3p6mi/node_modules/simple-mind-map-plugin-themes/index.js

这个可以修改包的引用代码(加入 .js 后缀)搞定,但是要修改的内容太多了,后续更新可维护性很差,其他同事还不一定会用。感觉不如把整个代码拉到项目里面来自己魔改,应该就不会出现这么多问题,时间有限,明天继续。

晚上一下心血来潮,用 Cursor 写了一波代码。各位都知道我小窝的日记是可以加配乐的,该功能在后台没有全局的播放器,在切换日记时会自动暂停,于是想着能不能用 useSyncExternalStore 自己手搓一个全局状态,来达到这样的功能。

简单和 AI 描述需求后,我发现它写的挺好,可惜样式方面达不到我想要的预期,自己手动调整了一些。关于 useSyncExternalStore 实现一个全局状态,AI 并没有发现自己写了个 Bug。

我用了 Cursor 的 Chat 模式问了它有关该代码的问题,然后按照我的理解来介绍吧。首先 Subscribe 函数里负责插入多个 Listener 函数,一旦状态改变,需要调用每一个 Listener 函数,通过 getSnapshot 函数返回最新的状态,React 将会使用这个值和之前的作比较(没错,并不需要我们自己做比较算法),从而实现的将一个外部状态同步回 React 工作流上。这个设计我认为很像发布订阅模式,之前我写过不少类似的逻辑。

既然搞清楚了 useSyncExternalStore 的逻辑,那么也就知道问题了,AI 忽略了对象的引用问题,React 的浅比较发现不到变化,因此需要使用 ... 大法,让对象的引用发生变化,才会让 React 比较出差异。不过在追问它的时候,它也确实找出问题了。

除此之外,晚上还做了这些事:

  • 联系苹果客服解决 iPad 不能购买 AC 的问题

    • 按照他去升级系统和重置设置均未解决
  • 修了两张图,返给一位老师了
  • 原神日常委托和部分剧情
详情

一个功能很强,但用起来不太爽的思维导图

今天主要在尝试使用 simple-mind-map 这个思维导图库来做新需求,这个库是目前来看开源里面功能做的最全的,但是在细节打磨方面有不少用起来比较难受的问题。

  • 优点

    • 支持插件形式的功能扩展
    • 兼容手机触摸操作
    • 支持导出多种图片格式
    • 支持修改主题外观、编辑节点内容
  • 缺点

    • TypeScript 支持不好,源码几乎都是 JavaScript 编写的
    • 对 Vite 的兼容性不好,一些 Demo 中的常量无法被引入,会报错
    • 对 SSR 的框架支持不好(Remix 需要使用 await import() 函数动态加载)

当然这只是尝试了下最基础的使用,我认为在 useEffect 里面动态加载库还是过于愚蠢,还是得想办法正常引入加载会比较好。我也发现了一些大厂维护的更高级的流程图库,但是它们的数据表示方式没有这个方便,他这种给 AI 生成或许会更容易。

晚上修好了两位老师的图,阿尼亚和甘雨。甘雨的甚至不需要返修了,老师同意直接就可以发了。

被“附魔”的电脑,再次黑屏

今天我的 MacBook Pro 2020 拿去公司之后发现又有异常现象,打算先重启一波,结果直接黑屏再次暴毙。这台电脑真就和附魔了一样啊,看我马上要用 MacBook Air 2022 继续干活,就直接罢工了?

我也把这件事和同事 @Jeason 吐槽了,之前 MacBook Air 拿去深圳送修了,屏幕主板全换了。他说 MacBook 不是特别耐草么,可结果就是我这手上用两台就是坏掉两台,特别奇怪。他说找第三方修也不贵,可我之前就修了 2000 块换了个 T2 芯片。返修过一次,结果还是一样的症状概率黑屏。他说让我返修到没症状为止呗,主要这个问题是随机出现,等到再次黑屏的时候都过保了,它保修就只有半年而已。他这才道出了他自己使用过程遇到的问题,不过可能只是系统 Bug,他一直外接硬盘来用,可能休眠之后才会出现。

工作任务方面主要修了一个 Bug 让我印象深刻,虽然就改了一行代码,但是实际理解起来挺绕的。主要是重写成 Hooks 来计算产品价格之后,与之前旧版组件的逻辑有些出入,我没有彻底将旧版的一并套用过来,旧版组件显示是美元(正确的),但优惠百分比却是按照日元计算的(套用了新组件的 Hooks),而新版组件那边显示是日元,优惠百分比也是日元,所以是错的。

另外有个新的发现,就是美图秀秀似乎不是根据设备类型来判断输出图片尺寸的。我借了公司的 iPad Mini 5 安装发现输出只有 100W 像素,比我的手机还低。这可能是根据 SOC 或者设备型号来指定的,估计是为了保证在不同性能设备下,输出图片的速度没有明显差异?

那台 MacBook Pro 回去插电源检查电流似乎是正常范围,什么时候瞎折腾一波可能又能起死回生。不过这段时间就让它好好休息吧!今天总算不用修图了,直接原神启动,顺便完善一下今天和之前漫展的日记,后续传一下图片再发布。

又去一趟深圳

今天又去了一趟深圳,主要目的就是拿回我的宝贝电脑。一大早醒来吃完早餐结果并没有拦到出租车,没赶上 08:50 的车次,下一趟车在一小时以后,结果我发现我改签改错到了两个小时之后,挺倒霉的 😓

还好一点到深圳也还凑合,去 🍎 取电脑要带上身份证,拿到机器之后就是刚刚装好系统的画面,需要重新开始设置。我当场用时间机器还原了一下,结果发现用户根目录的内容也被还原了,而我的预期是除了个人文件其他数据都要重新开始,只能后面拿回去慢慢整了。

一顿还不错的午饭后,我和 @MJ 去逛了逛深圳的“高新”区,说白了就是各种知名企业入驻的写字楼,我们在科苑地铁站下车,之后骑车转了一圈,当然也去了腾讯大楼。我和他互拍了一些照片,他给我拍的似乎有点歪。低情商说法就是他把我拍的太小了,高情商说法就是他的进步空间还很大。

后补:结果谁能想到这里的照片是他少数的形象照,后面还被他拿去相亲用了

原先我们打算去“海上世界”转转,但是天气有些雨比较阴,最后选择去他的住处玩游戏看番剧。看了一集《艾莉同学》,体验了下他练度还不错的鸣潮号,玩了一下新出的活动。这游戏就是讲究操作,不像我玩原那么休闲随便打就完了...

与三月七的约定

今天是 SN 魂漫展的第一天,在 @灵音 老师的“邀请”下和她一起游场,我上午十点就来到现场了,结果人居然特别的少,要知道这还是在会展中心的漫展啊!

其实群里不少老师也似乎能预料到并不会特别热闹,官方的通知群都还不到 500 人。即便如此我并不觉得亏,毕竟我的门票是 B 站那边主办方搞抽奖出的!而且可以直接找她一顿输出,像我这样的新手其实找谁拍可能都差不太多,不如找熟悉的 Coser 老师没那么容易尴尬。

@灵音 老师认识不少摄影老师,在现场也有不少摄影叫她过去拍照。第一个开了常亮灯阵的不知道是哪位老师,要知道开常亮灯的就是赛博菩萨,不需要特别多技巧就能拍出还不错的照片,以至于不少摄影都来到这里蹭拍,我自然也是其中那一个。甚至还轮不到我来指导动作,找个还不错的角度跟着拍就完事了。

在闪光灯和常亮灯的加持下,背景的杂乱几乎可以忽略不计,再加上 @灵音 老师现场摆出了多种有趣动作,这次来拍照的成品,又是比之前的要更上一层楼。

现场的 Coser 真的不多,其他灯阵的老师也会来找她拍。其中我对 @卡碧尼 老师的出片过程印象深刻,他非常细腻的指导动作,似乎不放过任何一点细节。我几乎全程在看着他,@灵音 老师在他的闪光灯阵下也非常出片,灯直接往地板照,特别凸显人物主体。不过有时候我在他旁边机位的成品就不够好,镜头要怼在弓箭道具本体旁才是最佳的。

期间我去其他地方找 Coser 拍照,我盯上一位 COS《疯狂动物城》朱迪警长的老师,她把我给拒了,理由是她男朋友也是摄影。这个理由有点让我无语,可能她比较在意自己出现在别人的相机或者是网络账号里吧,我尊重她的选择。不过有一说一我感觉和 Coser 谈恋爱似乎也挺尴尬的,就怕变成前任之后还经常在漫展里能够见到什么的。

没找几个 Coser 拍照,我找了个地方稍作休息。@灵音 老师送了我一份她自制的小蛋糕,无论是品相还是味道都挺不错,更重要的还是心意嘛。此时我似乎想不到能送什么给她好,有机会请她喝点什么吧。时间来到三点半左右,由于没吃午饭,我提议出去附近的商圈买点东西吃。

在附近转了一圈,我意外发现身旁的建筑挺好看的,当即给她单独来了一张没有指导的照片。同时看到蛇叔在场外被好多人集邮拍照,给两位认识的老师拍了,可惜自己没有蹭到机会。@灵音 老师转手就把自己有蛇叔签名的镭射票送给了我,“你们男生会更喜欢假面骑士吧”,这无疑让我感到了一丝温暖。之后和她朋友三人一起去小超市买了点小吃,我想请她吃点,可她坚持说自己并不饿。

下午五点左右,她说 @柠檬茶 摄影老师约她出去场外拍海景,这不是绝佳的学习机会么,我都已经能想到在外面拍能有多出片了。不过在实际的拍摄过程中我发现一个问题,就是他们用的镜头大多是什么 50、85 焦段的,就我一个 33(全画幅 50),以至于他们在我后面拍,而我只能在他们前面拍,蹭拍就明显没那么容易了。长焦距的好处是显得背景大,短焦距的好处就是离模特近,但我也不知道哪个在自己手上会更顺手一些,恐怕还是得靠时间去验证了吧。

最后一站去了漫展终点富华里,和几位老师吃了一顿顺德菜,除了刚刚几位摄影,同座的还有 Coser @卿安。在这么多新面孔面前我依旧显得比较腼腆,但后续也和他们逐渐有了一些话题。了解到 @卿安 老师玩了很久的漫展,她在一群,而我在三群(一个群就差不多 2000 人),摄影老师 @阿卓 对于全国各地的展子也颇有经验,还是个米游全家桶玩家。最后附近转了转并没有抓到几位 Coser,随即各回各家,今日的活动到此结束。

+20
详情
1
2
3
...
13
奇趣音乐盒技术源于 Kico Player
Emmm,这里是歌词君