im_roriri | Unsorted

Telegram-канал im_roriri - 螺莉莉的黑板报

2449

Subscribe to a channel

螺莉莉的黑板报

fluentui-copilot/react-copilot" rel="nofollow">https://www.npmjs.com/package/@fluentui-copilot/react-copilot

微软发了一套 AI 组件,但是没有文档……

Читать полностью…

螺莉莉的黑板报

我处理 Feature Request 的原则比较简单:你不要教我什么是好的,我自己会判断。

Читать полностью…

螺莉莉的黑板报

尽管 Spotify 上的 AI 音乐让人唾弃,但我依然给予 What is 尊重,因为至少他有基本的审美,在大量的 Shitty 生成物中挑选出了质量可接受的内容。

Читать полностью…

螺莉莉的黑板报

说来,iOS 开发这边是不是不太流行程序开源……

Читать полностью…

螺莉莉的黑板报

sigh, 饿了么的网页版做的真的很烂……

Читать полностью…

螺莉莉的黑板报

明天做 UI 展示这块的逻辑 _(:3 」∠ )_

Читать полностью…

螺莉莉的黑板报

「啊,不想做 Server Side 的面板」
「哦,不对,我是不是可以直接 v0.dev」
「Q Q」

Читать полностью…

螺莉莉的黑板报

昨天又推了一版 alpha.2,把 linux-arm64 和 macos 版本修了一下。趁着这次发版讲讲 1.1.0 发版之后的一些幕后故事。

在 1.1.0 发版之后我做了很多探索性的工作,像是音乐的自动 tagging 功能、音频相似性分析算法的测试。音频识别的 Rust 实现已经全都做完了,基于 AcoustID 和 Shazam 两套服务,但是前者限定了不能商业使用(Rune 是一款开源且具有商业性质的软件)、后者是基于野路子直接调 Shazam Android 私有 API 完成识别,我肯定不能随便在 Rune 里面嵌入这些逻辑,所以那一段时间折腾的封装最后就变成了搁置案件放在了 Rune 的软件仓库里没有做后续集成。

不过基于音频识别衍生出来的音频指纹算法可以用于判断媒体之间的相似性,因此媒体去重这个功能现在已经具备技术基础,还差细节性的 UX 设计,这是一个比较复杂的事情,我后面会花时间慢慢做。

接下来就是耗费了我一个多月才完成的遥控协议:在一台电脑上控制另外一个设备上的 Rune 播放什么曲目。

在初期构思这个功能时,我想到了两个实现路径,一个是提供一个简单的播放控制功能:你可以控制播放暂停、切换曲目,就像大多数开源的音频遥控实现一样。另外一个实现路径是:提供完整的 Rune 使用体验,从媒体库浏览、到管理功能全部保留,就像在操控一台正常的 Rune 客户端一样,只是发声的设备不在本地而已。

拿着两个提案去社区里问了一圈,大家更喜欢后面的提案,于是我就开始着手实现了。

因为 rinf 这套方案本身就是通过 protobuf 在 Flutter 和 Rust 之间通信的,所以原理上,我只需要在 Rust 侧把收到的信号走 Websocket 服务器透到目标设备上,再把远端执行的结果传回来,遥控功能就算做完了。

不过,实操上并不是「这不是很简单,你做做不就有了」的事情。因为 rinf 本身并非基于 RPC 思路设计,因此我得用 macro 手工把二者串起来的才能让整件事情工作。此外,Rust 侧也得处理没有唤起方的「事件广播」,像是播放进度、媒体可视化。所以我做的第一件事请就是,把原来实现的 macro 全都打掉,写一套可以自由组合后端的新 macro,并基于此实现一个 Websocket 服务器。

接下来是设备之间的发现问题,很多「开源拖拉机」的做法是「直接打目标设备的 IP」,这不失为一种可行的解决方法,但过于 Nerdy,对用户来说心智负担真的很大。所以我们参照 localsend 的协议在 Rust 上实现了一个基于 UDP 多播的内网发现流程。调试的时候因为忘了 lo 上不能多播所以浪费了很多时间,不过这一块还是比较顺利地实现出来了。

接下来就是鉴权系统的实现和通信加密。我们一定不能直接做明文通信,但内网通信设备之间怎么互信是一个比较麻烦的事情。这边我选择的方案是自签一个证书,公钥的签名当成 Client 模式的密钥、而这个密钥本身也能做 HTTPS 服务的证书,这样能保证基本的通信安全性,而且是通过一组密钥同时解决了鉴权和加密两件事,用户体验上的负担是比较小的。客户端在 Pin 证书的时候,Rune 会挖掉密钥上的两个字符,要用户做一道选择题,在客户端发起请求的时候,担任服务器的 Rune 客户端会自动弹出鉴权请求窗口,上面同时显示了确认是否授权、以及本机密钥两部分功能。客户端需要比照图案作出选择,服务端需要确认给予控制权限。

另外,这套加密通信系统也支持标准证书,这样你可以通过 Nginx 安全第把播放器控制服务暴露给公网,来实现更多用例。

这个设计看起来都挺美好的,但现实比较残忍。我得承认作为一名前端,搞自签证书、配证书信任之类的事情并不是我擅长的,因此熟悉这一块的基础知识和工具链就花了好长时间。算上画界面写后端之类哩哩啦啦的各种杂活,还有我兼开的旧坑卡牌游戏北平IO,这段时间每天都在把自己往 Burnout 的边缘推,所以效率并不高,眼睛一闭一睁好几周就飞出去了。

你或许以为上面这些就是实现遥控功能的全部,但事实上还有很多细节的功能要处理。比如,并不是所有请求都可以被发送到远程,像是连接管理、断开连接、切换媒体库之类的功能还是需要在本地处理,这不仅意味着你需要在封装层面区分两种不同的的消息类型,本地也得提供大量的伪实现来确保能有一个「工作一半、完成基本系统管理」的播放器核心(主要是为了过编译)。

除此以外,虽然播放是在远程,但是展示媒体封面这件事情是在本地发生的,所以还得单独处理 Coverart 提取和下载的问题。但我个人觉得,因为后面还要做手机客户端直接从另外一个 Rune Instance 同步音乐的功能,所以传输二进制文件肯定绕不开,该做还是要做。因为 Flutter 信任自签证书没那么好搞,所以这些功能全都放在 Rust 侧来做了。当然,这些也都是不走远程协议的 RPC 请求。

反正,一个「看起来蛮简单」的功能,实际做起来其实挺复杂的。这次做遥控协议还带来了一个有趣的副产物:Smart Speaker Service,一个纯 CLI 程序,你可以把它挂在 systemd 上,用任意一台设备来控制它的音乐播放。这有点像 Sonos,但不带云服务。

但考虑到 Rune 本身推崇的就是「把音乐放在你自己的电脑上」,这个 Half Sonos 并不鸡肋。

Читать полностью…

螺莉莉的黑板报

Spotify's Beta Used 'Pirate' MP3 Files, Some from Pirate Bay (❄️ Score: 151+ in 3 days)

Link: https://readhacker.news/s/6pPMf
Comments: https://readhacker.news/c/6pPMf

Читать полностью…

螺莉莉的黑板报

维苏威火山突然喷发致大脑组织玻璃化
#科学

公元 79 年 8 月,维苏威火山的突然喷发摧毁了意大利庞贝和赫库兰尼姆两座古城。考古学家于 2020 年在赫库兰尼姆一名遇难者头骨中发现了深蓝色玻璃状物质,这是人类大脑在极端条件下瞬间转化为玻璃的结果。这种现象极为罕见。因为要形成玻璃,物质必须被迅速加热到至少510摄氏度,然后急速冷却,以防止晶体结构的形成。对于含有水分的有机物来说,这种情况几乎不可能自然发生。这名死者当时躺在奥古斯都学院的床上,被突如其来的火山灰云瞬间吞噬。普通的火山碎屑流温度不会超过 465 摄氏度,并且冷却速度较慢,不足以导致如此剧烈的变化。科学家推测,是维苏威火山喷发时释放出的超高温火山灰云造成了这一切。这些火山灰云不仅温度极高,而且来去匆匆,它们迅速提升了人体温度,随后又快速消散,导致环境温度骤降。在这种极端条件下,遇难者脑组织瞬间经历了从液态到固态的直接转换,形成了独特的有机物玻璃,而他的头骨为这份珍贵的大脑标本撑起了保护伞,长久地留存了下来。
Scientific Reports:Unique formation of organic glass from a human brain in the Vesuvius eruption of 79 CE
科技日报:揭秘古代悬案:大脑组织为何变成了玻璃

Читать полностью…

螺莉莉的黑板报

https://zh.moegirl.org.cn/User:%E7%81%AF%EF%BC%8C%E7%81%AF%E7%81%AF%E7%81%AF%E7%81%AF~/%E7%B2%98%E8%BF%9E%E7%A7%91%E6%8A%80

抽象……

Читать полностью…

螺莉莉的黑板报

啊,总算有一个稳定能用的 Rune 版本了……

Читать полностью…

螺莉莉的黑板报

Affinity 2.6 竟然加了机器学习抠图,可喜可贺

Читать полностью…

螺莉莉的黑板报

Rune V2 会是一个非常非常大的版本……

Читать полностью…

螺莉莉的黑板报

Rust, 还没找到一个好的办法用来同步两个 sqlite

Читать полностью…

螺莉莉的黑板报

https://x.com/luke_pighetti/status/1894029534447513866 iOS 18.4 breaks flutter development

Читать полностью…

螺莉莉的黑板报

#Rune 今天修了一个 Bug,处理了两个 Feature Request

Читать полностью…

螺莉莉的黑板报

我对炒股炒币的看法如下:我不聪明,搞不懂那些宏观经济原理,所以不会杀进去跟着当赌徒,这不是我想不想的问题,是我只能踏踏实实做事存钱。

Читать полностью…

螺莉莉的黑板报

https://item.taobao.com/item.htm?abbucket=1&id=815200229988

有趣

Читать полностью…

螺莉莉的黑板报

https://github.com/ScoopInstaller/Extras/issues/14635#event-16517649294

虽然不受 Rune 官方的售后支持,但 Scoop 版本的 Rune 已经进仓库了

Читать полностью…

螺莉莉的黑板报

HeHeDa: https://jandan.net/t/5860953
OO: 358 XX: 4
所斯旧: @蛋友16fd762e1e6be 是的。数学上有一整个分支是关于“平面铺砌”的,这是个蛮重要的领域。
OO: 77, XX: 1
kev_oio: 喵喵砖
OO: 36, XX: 1
蛋友16fd762e1e6be: 这种是怎么设计的,肯定有什么诀窍吧
OO: 6, XX: 1

Читать полностью…

螺莉莉的黑板报

from 波黑大虾Niko

Читать полностью…

螺莉莉的黑板报

https://www.youtube.com/watch?v=Ju0ndy2kwlw

M2 组 exo cluster 跑 LLM,瓶颈还是通信

Читать полностью…

螺莉莉的黑板报

BPIO 的世界观设定将参考此技术 🌚🌝🌚

Читать полностью…

螺莉莉的黑板报

https://www.youtube.com/watch?v=AOaXXJUdXds

「Your head is huge...」

Читать полностью…

螺莉莉的黑板报

EA 开源命令与征服系列游戏
#开源

EA 在一位 MOD 开发者 Luke "CCHyper" Feenan 帮助下在 GPLv3 许可证下公开了多款《命令与征服》系列游戏的源代码,其中包括:原版《命令与征服》(aka《泰伯利亚黎明》)、《命令与征服:红色警戒》、《命令与征服:叛逆者》、《命令与征服:将军》 及其扩展《零点行动》。EA 还为 Steam 上的《命令与征服》系列加入 Steam Workshop 支持,允许社区的地图创作者创作自定义地图并发布在 Steam 上。EA 还发布了 C&C Modding Support 包,提供了原游戏开发商 Westwood 使用的 SAGE 引擎的 Xml、Schema、Script、Shader 和 Map 文件。
Github.com/electronicarts

Читать полностью…

螺莉莉的黑板报

https://www.youtube.com/watch?v=6FrB6hx3x7w

好强

Читать полностью…

螺莉莉的黑板报

好,右上角有了,明天把卡片的信息填一遍,把底下卡片的信息也填了

Читать полностью…

螺莉莉的黑板报

盐酥鸡老板在生日会的时候被盗了400万美金的资产。
https://x.com/suji_yan/status/1895103068808642811

Читать полностью…

螺莉莉的黑板报

https://fxtwitter.com/mrblackstudio/status/1895079859476468197

Читать полностью…
Subscribe to a channel