Remix.run 与旧版 React 组件库的兼容性指南

去年伴随 React 18 的发布了一系列非常新潮的 API,它们都为更大规模的 Web 程序渲染提供了可能,而这些 看起来非常时髦的技术也带来了很多问题,这在和服务端渲染有关的任务当中尤为严重。尽管 React 18 在开发 过程当中就组建了一个 Work Group 和诸多领域的开发者交换过意见,但因为步子迈的太大导致许多周边生态在 一年之后也依然没能完成适配工作。与之相对的,很多 Meta Framework 却跟进的非常快,一系列官方推进的 最佳实践马上就得到了落实。这之中便产生了某种撕裂,致使诸多 UI 组件库不能正常的在客户端进行渲染,本文 将以微软推出的 Fluent UI V9 为例,简要介绍过渡期间开发者可以完成的一些工作,来确保 Remix.run 这类 元框架可以和你的组件库和谐共处。

2023年5月9日,我开源了自己的脑袋

太长不看:我决定在 GitHub 上以 CC0 / MIT 协议开源自己的磁共振脑影像,使其进入公有领域,并放弃自己对于这些文件的所有权利,希望能够为这个世界带来一些微小的变化。

促使我做出这个决定的原因有很多,但最值得拿出来说的是,它看起来很像是某种行为艺术。我希望能够展现出一种与当下「闭源商业化人工智能」相左的姿态,虽然你不能给这玩意插个电让它动起来(我觉得你也不一定想这样做,想想都觉得很恐怖),但我们的确有很多相当好玩的事情可以做。

对了,额外插一句,我这颗脑袋也是一颗被两百万人围观过的脑子,在「老奇好好奇」的那集《核磁共振为何知道》当中那个「朋友的脑子」,就是我的脑子啦!视频做的很好看,如果你还没看过的话推荐看一看!

瓶中的小人究竟何时醒来:人、人工、智能和人工智能

在过去的几年里,「人工智能」技术可以说是赚足了人们的眼球,它已经从简单的「三七分类」跃然成为了能够匹敌人类的专业画师、文字工作者。由人工智能生成出来的作品,能够在专业的绘画比赛当中拔得头筹,能在摄影比赛中击败「真实的影像」,也能通过甚至人类都很难完成的医师和律师职业能力评定。有些人为此感到兴奋,也有些人为此感到恐慌。我们正在见证另外一个历史的转折点:一个可以像工业革命、印刷机、摄影设备一样,打破社会平衡并带领我们跃入下一个世代的转折点。但我们似乎并没有做好接纳它的准备,毕竟在面对全然未知的事物时,一切的准备都没有「前车」可以用来「借鉴」。

人工智能技术会让人感到危险和恐慌,其中最重要的原因可能是它「看起来太像人了」。这种相似落入到了恐怖谷曲线当中,尽管在某种程度上它看起来「具有人性」,但又显得有些失真,这种似像非像的形态让许多人感到手足无措。Google 内部曾有数个从事伦理方向的研究人员警告称人工智能似乎「已经具有了意识」,「已经具备直觉能力」,「是有灵魂的」。面对这些警告,工业界和学界则摆出了完全相反的态度,认为它是荒诞的:数学模型怎么可能会具有意识。但数学模型真的没有意识吗?

当我拿出这个问题与朋友们讨论的时候,在场的工程师们给出的回答非常的一致:「开玩笑,人工智能怎么可能会有意识?」,我又问:「为什么你会觉得它们是没有意识的呢?它们究竟距离产生意识还有多远?」

关于学习:一个和毕生发展与认知能力有关的宏观视角

按理说每年都应该有一个年度总结,但是这两年过得实在太过贫瘠没什么好分享的,所以我决定通过一个相对较为大型的作品来总结一下这些年我的所见和所思。这就是一篇花了整个春节长假完成的大型文字作品——关于学习。

在这篇文章中,我会从心理健康、认知和教育学的角度来分析现在学校教育当中最基础的构成要件,并且如何映射到每一个学科之上,对应适合且可执行的学习方法。以及在此之上,这些学科对应的能力又如何为个体的毕生发展、宏观社会的公民素养服务。

这会是一个非常庞大的话题,本篇文章也只会是一个范围有限切角,希望能给各位提供一些启发,或者安慰。

产品伦理:一个值得为 Telegram 付费的理由

众所周知的,Telegram 在近日推出了高级服务 Telegram Premium,自此这个「无欲无求」的聊天软件开始真正的尝试了「使用者付费」的盈利模式。这个服务其实引起了一些争议:接近五美金的售价换来的却是一些看起来没那么实用的功能。看看隔壁 Discord!你买了会员就可以表情包无限用!直播画质拉满!你还能支持喜欢的服务器,让这个服务器更加个·性·化!不过话说回来,这些功能在 Telegram 上好像本身就是免费的。

这种单纯功能层面上的对比会让我们对产品价值的评价变得复杂。在这里我想提供一个更加简单的,假设这样一个场景:如果一切的聊天软件都是付费的,Telegram 也是付费的。你必须得花钱才能注册账号在上面聊天的话,你愿意为他付多少钱?而每个其他的聊天平台你又会愿意为他付多少钱呢?在这里开放读者问答,你可以为你所听说过的,或者正在使用的每一个社交软件开出一份心理价格,比如 Facebook, Twitter, Mastodon, Matrix, Telegram, 微信, 微博, 知乎等每一个你使用过的平台都可以。

幕后故事:交互视频播放器的技术发展历史

今天想简单讲点幕后故事,一个简单的交互视频背后那些复杂的技术迭代历程,以及现在它究竟以什么样的方式运作。这篇文章会分成两部分,史学的部分和如今的技术架构介绍。

这篇文章会着重笔墨在发现问题、和解决问题的过程,以及我们是如何通过架构设计的方式来重新组织业务需求,并作出合理抽象的,对我个人来讲这是一段生命历程的记录;对各位读者来讲,我也希望它能起到一些启发性的作用。

纪念住了两年的出租屋

因为五月末要搬去上海(Actually 苏州昆山),要和这个住了两年的小屋子告别了,虽然说出租屋只有十一平但是生活还是一直在认真过,所以写点文字记录一下我和这个空间共处的两年时光。整个房间发生巨大变化是从去年双十一开始的,从那时起我陆续购买了各式各样的智能家电和收纳工具,也在 NAS 上搭了一整套的智能家居配套的管理工具,我开始思考自己应该如何和这个空间共处,如何让这个空间给我带来更多的安全感和亲切感。

在这篇文章中,我会介绍一些让我自豪的室内布置,也会详细的介绍每一个智能家居的配置方式,希望能给你带来一些启发。

料理包:一种现代青年的饮食方式

(aka 没有家人的可怜虫如何一个人省钱的吃好饭)

警告:本文内有致死量返利链接,你要是觉得烦可以直接去京东上搜,这样我就拿不到提成了 _(:3 」∠ )_。

从春节开始尝试了各式各样的速食品,从方便米饭到料理包,希望找到一个经济方便方式解决吃饭的问题,同时又不像若饭或者 Soylent 那么 Drama。在 Telegram 频道上聊了这件事情,群友们表示这东西的产业链都挺成熟的了,外面很多馆子和外卖都是料理包放进热水里煮一煮然后上桌的,成本低的令人发指。那么为什么不直接买料理包吃呢,没有中间商赚差价还省的等着外卖,想吃立刻就吃,并没有什么明显的坏处。

于是乎耗时好几个月的试吃活动就这样开始了 (ノ>ω<)ノ。

用恶心的类型魔法构建类型安全的 Custom Event

TypeScript 的类型系统和 JavaScript 的事件系统似乎有点相性不合,具体点讲,如果你想在里面加一些自定义的类型标注就必须的直接改 EventTarget (或者 EventEmitter)的类型定义,再或者用类似 event.detail as SomeType 的方式构建一种很微妙的「类型安全」氛围。

这两种方法都是我不喜欢的,前者会对类型系统造成污染,个人更加喜欢把「做同一件事情的代码放在一起」,但是按照前者的思路,类型定义和真正的 Event Listener 会「身首异处」,看起来非常可怜,而且,比如你在模块 A 中没有用到模块 B 声明的类型定义,但是它的 EventTarget 还是会带着模块 B 的类型定义,看起来就很脏,有一种全局变量满天飞的味道。而第二种做法则完全没有没有做到真正的类型安全,如果你 as 错了,那一切都没得聊了。

前些日子花了点心思研究了一下这种东西究竟要怎么写,最后选择了一种把我自己恶心到了的方法,可以做到大面上干净清爽但是内部恶臭得要死。

2020 阅读记录

2020 年是我执行阅读计划的第一年,执行这项计划的目的很简单,为了让我的 Podcast 有内容、让我下班之后也能做点正事不至于脑子僵掉、让我贫乏的词汇能够扩充一些不至于写出来的文章自己都看不下去。

选书的思路也很简单,常听的那几个 Podcast 主播推荐的书、Readmoo 上了畅销榜的书、想准备什么 Podcast 主题的时候去淘的书。除了一些贵到离谱的之外,看的书里面大部分都是正版,全为支持这个日薄西山的出版业。拜各个厂商自立山头整出来一大堆阅读平台所赐,我今年成了一个不折不扣的 DRM 拆弹专家,常见平台的去 DRM 方法全部了然于胸,甚至给 Readmoo 单独写了一个 DRM Removal 工具(然而并不开源也不提供下载,仅作私用)。

DRM 和盗版是两股螺旋向上的力量,共同蚕食着作者的利益和读者的阅读体验,将出版行业的未来带向了一片无人愿意踏入的疆土。

以上仅仅是一点个人的观察,说不上对不对。