Posts for: #Tech

知识星球的 10 年

知识星球 10 岁了。一个小工具 10 岁,在这个宏大的时代下,微不足道。自家的孩子,出生在移动互联网的尾巴,当下赶上 AI 凶猛地冲撞过来,还是幸运的。

试图回忆过去的时候,我发现,能被记住的,往往是一些问题、低谷。

跟大家分享几个低谷。

事故

说出来大家可能会笑——其实,早期版本被 @Fenng 在朋友圈、微博推荐的前几次,都直接把服务拖垮了。

第一次挂的原因是,每个用户登录的时候,都会一次性把圈子里的用户列表拉回来,几千个用户通讯录信息、头像,几千个人同时拉——嗯,在我们还是单服务器的时候,瞬间就雪崩了。

2021 年,生财有术 418 续费,在 20:00 秒杀开始时,数据库没撑住,甚至导致了付款方面的问题,比如付了费,我们却没准确记录。那次给生财有术团队带来了挺大的后续工作量。

那之后,为了让整个活动更加顺滑,研发团队做了些工作,比如:

  1. 后端、运维工作
  • 压力测试,通过压力测试,找出木桶的最短板,从而不断做性能调优

  • 数据库按业务拆分成多个集群,进一步减轻数据库压力

  • 代码级调优(核心目的是为主库减负)

  • 限速,如果达到我们压力测试的峰值,对来访用户进行排队、降级等限制

  • 临时扩容,根据去年的经验,将服务器做了短期大幅扩容,活动结束后释放

  1. 前端工作
  • 页面静态化

技术上的调优,加上微信支付给力的协助,那之后就没出过这么大事故了。

2017 年的下架

2017 年,因为风控、内容安全问题,产品被下架,后续会如何,一无所知。我后来发了张照片,记录:这张照片是 2017 年 6 月 30 日拍的,那时公司遇到一个很大的坎,尽了全力东奔西走。所幸贵人相助,指点、计划、执行、核查、修正,投入很大的精力和成本,走出来了。那会儿,在等机会去拜访人,外面天热,猫在地铁站里,有点累,盘腿在地上坐着,闭目养神。shotgun 拍下来了。偶尔翻到,还是会回忆起那个炎热的下午。创业就是这样,如履薄冰。

那段时间还有另一张图片——归零的图片。

创业公司,很大概率活不过下个月,所以,或许不用规划太长远,尤其是现在的巨变时代,我们也根本看不清三个月后的世界变化。

找到光

除了低谷,当然也有欣喜,比如找到光的欣喜。

在回顾时,我翻了旧照片,找到一张 2015 年 5 月 6 日,在腾讯大厦拍的照片,这是个起点。白板上的草稿,是 Tony 随手画下的。

那时候,我们观察到的问题来自微信群。

用微信群沟通极简、便捷,很多人的生活、工作中都离不开。我自己就大量在工作中使用微信群——与同事、伙伴、用户在群里沟通,迅速解决问题。在重度使用过程中,我也感受到了一些不便,比如:精华内容不连续不易整理、内容不备份很容易遗失遗忘、文件图片不及时下载很快被清理、时常被各种表情包红包或者无关话题岔开歪楼导致讨论不聚焦等等。

我们认为,一个简单的移动端社区,可能会是微信群的良好补充,而海量使用微信工作的人们,也将是我们的目标用户群。于是我们花了几个月时间,把产品做出来了,2015 年的 11 月 10 日,第一个对外公开的版本发布了,版本号是 1.1.1——从 0.9 版开始,内部已经迭代过几个版本。

但,就像绝大多数创业公司的创业项目那样,产品开发出来后,我们尝试着在网络上做了些推广,响应者寥寥。我尝试着找一些朋友——有在传统企业里负责信息技术的,有各行各业野路子的创业者,也有活跃在社交媒体的内容创作者。大多数朋友都会下载,登录测试,然后遗忘。

所以,我们一边自我怀疑,一边做各种迭代尝试。

第一个支持付费的版本是 1.15.4,在 2016 年 8 月 12 日上线。发布日志了,我们写了:

[阅读全文]

你验证过吗?

昨天在 Twitter 上,很多人在“围剿”微信,其中有一位用户写:

不知道你们知不知道,微信传任何文件,即使是同一个文件都是全量拷贝一次。七天文件显示过期的时候,其实文件还在手机里,就是不给你看,如果此时你的朋友再发一次给你,还是会全量拷贝一份放在手机里 这就是为什么微信这么占空间的原因,这难道不是技术上的缺陷吗?

一个 1G 的视频,发给 3 个朋友,就占掉 3G 的内存

我忍不住回复:你验证过吗?

这让我想起多年前,我还在绿盟工程部当售前工程师时的一件小事。几个同事朋友约了,某个周末聊点技术——交流彼此近期看到有意思的技术、项目、产品。我分享的是一篇文章里提到的安全项目,当时在我看来还比较新颖。

我讲完后,同事“小吱吱”问了好几个问题,我都答不上来,他有点诧异,问我:你验证过吗?

我说:没有。

那时我还是挺惭愧的——没编译部署测试过,没看过代码,拿着一篇文章就满嘴跑火车了。

后来我会尽量让自己靠谱一点,传播之前,尽可能有判断,有验证。

简单,可靠,其实很难做到,共勉。

Mac 下 neovim 里自动 esc 切换输入法

1. 安装 macism

https://github.com/laishulu/macism

brew tap laishulu/homebrew
brew install macism

2. nvim 插件里加一个 im-select.lua

~/.config/nvim/lua/plugins/im-select.lua

return {
  "keaising/im-select.nvim",
  config = function()
    require("im_select").setup({
      -- 在普通模式下,默认使用的英文输入法
      -- 请将下面的值替换为您在上一步中获取到的英文输入法标识符
      default_im_select = "com.apple.keylayout.ABC", -- macOS 示例
      -- default_im_select = "1033", -- Windows 示例
      -- default_im_select = "keyboard-us", -- Linux (Fcitx5) 示例

      -- 设置触发切换的事件
      set_default_events = { "InsertLeave", "CmdlineLeave" },
      set_previous_events = { "InsertEnter" },

      -- 保持安静,当找不到依赖的命令行工具时不发出警告
      keep_quiet_on_no_binary = false,

      -- 异步切换输入法,避免卡顿
      async_switch_im = true
    })
  end,
}

Mac 下开启 sshd 登录后马上断开连接的一种可能

如果"共享 → 远程登录"里选择了"只允许这些用户…",系统会用 com.apple.access_ssh 做白名单。不在组里就会被 PAM 拒绝

# 查看是否在白名单组
dseditgroup -o checkmember -m "$USER" com.apple.access_ssh

# 不在的话加入(需要管理员密码)
sudo dseditgroup -o edit -a "$USER" -t user com.apple.access_ssh

# 也可放开给所有用户(图形界面改:系统设置 → 通用 → 共享 → 远程登录,选"所有用户")

改完重启 sshd:

sudo launchctl kickstart -k system/com.openssh.sshd

开源超轻量的 Flutter 聊天库

这两年,大量 AI ChatBot 涌现。不少人在用 Flutter 做跨平台应用时,想加个简单的 AI 聊天,却被一堆 IM 方案搞得头大——我们就是这样。

所以同事做了一个超轻量的 Flutter 库:simple_chat。

它能让你几行代码就把聊天界面跑起来,通吃 iOS、Android、Web。

之所以叫 simple,是因为它真的是主打简洁。你不用拉一大堆依赖或后端配置,几分钟就能搞定。UI 也很好改,如果想要自己定制聊天气泡、字体、颜色,分分钟就能上手。

有人会问,能用它干什么?

常见的 IM、客服、AI 聊天机器人都能用得上,毕竟它支持消息发送状态、群聊、未读消息指示,还能直接选图、预览图片,算是“麻雀虽小,五脏俱全”。

如果你对那些大而全的 Stream、Sendbird 没什么兴趣,只想要个纯前端的简洁方案,simple_chat 或许就是你想要的。同事 Lawrence 还在不断迭代这个项目,未来计划支持更多自定义选项、多媒体消息、实时打字状态等功能。

项目开源,如果你也想帮忙或者提想法,不妨去看看:

simple_chat 能让 Flutter 开发者省去很多麻烦,专注业务逻辑,而不是陷在复杂的聊天框架里。

再上一个 simple_chat 的小应用案例:EatVenture——觅食历险产品,里面嵌了 simple_chat,如图:

我用 EatVenture 解决俩问题:

  1. 在海外找餐馆

  2. 在餐厅看不懂菜单拍一下识图推荐

EatVenture 更多信息:https://tealseed.com/eatventure/。