为什么是产品决策优先级?(一)

two roads between trees

这个是个好问题:

  1. 为什么是产品来决策优先级?而不是研发而不是运营而不是项目经理?这个背后的核心到底是什么?
  2. 产品决策优先级的底层逻辑到底是什么?如果底层逻辑可以迁移,是不是别人也可以决策优先级?

我的答案如下:

  1. 产品决策的优先级核心逻辑是信息补全,产品让渡了一部分时间去参与各种会议,来换取足够的上下文,并基于这些上下文做出决策和调整。
  2. Leader 的预期是产品会被拉到各种不同的群 / 上下文里,梳理不同的信息,明确优先级,并帮助业务达成目标。
  3. 严格来说,一个好的产品需要的能力挺多的,你需要有用户感知、项目经验、沟通能力等各种不同的能力,才能更好的当产品。正是这样的原因,也让产品可以成为团队中的 Connector ,对齐不同人的信息和上下文。
  4. 产品决定大范围的优先级,但一些细节的优先级可以由具体执行的人来决策,毕竟要让听到炮火的人来做决策,才不会出现问题(也依赖听到炮火的人的能力)。

总结一下:

  1. 产品的决策底层逻辑是信息,这个人可以是运营/产品/研发,只需要让渡时间来做这些事情,你就可以成为这个做决策的人。

零食经济学

person holding black ceramic mug with coffee beans
d2b5ca33bd970f64a6301fa75ae2eb22 14
公司的零食箱

压力山大的时候,我就会选择去零食箱拿点零食,来消磨自己内心的压力(这也是为啥体重一直居高不下)。取零食多了,我开始有一些有意思的发现:

  • 我们楼层经常会剩下一些烤面筋、虾片、鸭脖;
  • 每次补仓的时候,并不会把之前的零食拿走,而是直接往里加新的零食;
  • 周末的时候,即使大家不怎么喜欢的零食,也会被吃完;

让我想到一个问题 — 如果我是餐饮同学,我会怎么做?

如果我希望零食被消耗的更快,那我会每次拍照或简单统计一下剩余的零食,然后大概可以知道不同楼层的零食偏好,并在下一次补仓周期里,重点补上那些大家消耗比较快的零食。这样可以让零食大量的被消耗。

如果我希望零食被消耗的更慢,那我会每次拍照并简单统计一下剩余的零食,这样可以大概知道大家不喜欢什么,在补仓周期里就可以进一步的补充大家不喜欢的零食,从而让零食可以被消耗的更慢。

使用 Renamer 批量重命名,节约重命名时间

d2b5ca33bd970f64a6301fa75ae2eb22 7

我最近在用 Youtube 看《喜人奇妙夜》(毕竟 Youtube 上有纯享版,体验太好了)。同时,为了方便我可以在地铁/高铁上看,我还会使用 Youtube-DLP 下载到本地。但,Youtube DLP 下载到本地的视频文件往往名字都特别特别的长,比如:

【纯享】《看不见的TA》i人闫佩伦和“鬼怪”张佑维变室友? | 《喜人奇妙夜》Amazing Night EP3 SKETCH #喜人奇妙夜 #闫佩伦 #张祐维 [XUsi1R1Ny80].f614.mp4

这个内容长度中存在了大量的无用信息,虽然对于 Youtube 这样的视频平台来说,有助于流量和搜索,但对于我这样的本地存储用户来说,大大的影响了我的本地观感,因此,我一般都会手动移出其中的无用信息。只保留作品名和基础的介绍信息,比如上面的文件名我会修改成 《看不见的TA》i人闫佩伦和“鬼怪”张佑维变室友?.mp4

当然,我可以写一个脚本来完成,但重命名这件事实在是太过于常见了,所以我也懒得写脚本(且脚本还需要指定路径,麻烦。),刚好,SetApp 套装中有一个 Renamer 的 App,可以解决这个问题,于是便有了这篇文章,介绍我自己是如何处理的。

分析目标和模块

Renamer 提供了多种重命名的能力,其中包括文本替换、正则表达式替换、数字、移出文本等多种能力,这些能力将会成为我稍后使用的工具。

d2b5ca33bd970f64a6301fa75ae2eb22
Renamer 提供的模块

如果看我们的文件名前后,可以很清晰的分辨出,我操作了两个部分:

  1. 去除了最前面的【纯享】
  2. 去除了后面一直到拓展名的中间介绍文字。

因此,我需要用到两个模块,来实现替换 —— 正则表达式(Regular Expression) 和文本替换(Find & Replace)。

配置替换

替换纯享

纯享因为是固定文本,所以替换比较简单,新增一个替换的动作,选择 Find & Replace,并配置只对文件名生效,设置 Find 为【纯享】,Replace 为空,就会在执行替换的时候,将【纯享】替换为空文本,来达到移除特定内容的效果。

d2b5ca33bd970f64a6301fa75ae2eb22 1

当然, 同样的功能你还可以用移除文本来操作 —— 选择 Remove Text, 并把要移出的 【纯享】放在里面即可。

d2b5ca33bd970f64a6301fa75ae2eb22 2

替换其他内容

【纯享】因为是固定文本,相对简单,但后续的内容则就复杂了许多,其中的内容会变化,且包含了大量的 ID、标签等信息,单纯的 Find & Replace 是无法解决的,因此我们这里用到正则表达式替换来完成。

你可以借助于 Regexr 这个网站来调试你的正则表达式,在上方编写你的表达式,并在下方填写你的测试文本,通过高亮,即可判断是否正确匹配。

d2b5ca33bd970f64a6301fa75ae2eb22 5

测试匹配正确后,复制上方的正则规则,在 Rename 中新增一个 Regular Expression 替换动作,配置成文件名 Only,并填入你的正则表达式。

d2b5ca33bd970f64a6301fa75ae2eb22 4

效果

最后,拖入你要修改名称的文件,就可以查看到批量修改文件名的效果了。这时你只需要拖入多个文件,就能一次性给 N 个文件完成更名的动作了。

d2b5ca33bd970f64a6301fa75ae2eb22 6

公司的期权该卖么?

turned-on MacBook Pro

在 X 上看到小橘子的这个信息,我觉得可以给一些我自己的输入。

从我自己的视角来看:如果你还愿意在这家公司工作,那么就应该继续持有。

接下来继续解释原因:

我这几年也在做一些投资,来满足自己在规律性的投资之外的动手的欲望。我卖飞过 NVDA、卖飞过 PDD、卖飞过 Microsoft。不过整体的收益还是正的,倒也还算是有一些心得。

期权可以理解为你所在公司的一部分权益,是兑换未来股票的机会。他代表着你对于一家公司的金钱的投入(虽然你并没有真实投入钱,但它也会占用同样钱的机会成本)。而你为一家公司工作,则是对这家公司的时间投入。

从这个视角来看,如果你觉得一家公司还不错 、还在增长,或还有增长的空间,你应该继续持有这家公司的期权或股票(至少这些不是卖出期权的理由)。那么,什么是我们卖出的理由?是我们发现更好的投资标的(比如你当前公司的增长是年化 10%,但你找到了年化 50% 的渠道);或者是我们发现当前公司已经不是优质的资产(比如你的公司已经在走下坡路了,它已经无力增长)。

如果你的卖出期权的理由符合上述两者任一,那么不要犹豫,卖吧。此外,如果你发现卖出的理由是当前的公司已经不是优质的资产,我建议你额外加一层评估:我当前是否有必要继续在这家公司工作?避免金钱投入分散了风险,但大量的时间放在了垃圾的资产之上。以及,记得在离职的时候把你的所有期权出清(既然它对于你来说已经是劣质资产了,为什么不卖掉呢?)。

当然,上述的这些条件依然需要你自己判断。不过,如果你持有的是自己所在公司的期权,其实相对来说还是好判断的,因为你真的懂这家公司,你真的能够感受到它的好与坏。相比于不熟悉的投资经理来说,我们还是可能拿到更细节的信息辅助判断的。这些信息,足够让你判断是否要继续持有当前公司的期权了。

我想要什么样的房子?

A bedroom with a large bed and a ceiling fan

在少数派看到一篇沪漂七年、搬家七次的文章,介绍了作者自己的选房思路。刚好,我从毕业开始,基本上每年搬家一次,也不断的试出来了什么是我想要的,记录一下,以便于后续看房的时候了解。

布局

必须两室及以上

我自己对于书房是有追求的。日常喜欢买书,也希望有一个不错的工作环境,因此,我希望我自己的房子应该是有两室及以上的。这涉及到我是否可以在家工作。

当然,两室还有个问题,如果有了孩子,可能不够,这个问题的解决办法是等有了孩子可以把书房外移(比如在同小区租一个房子作为书房 / 健身房等可外移的家庭职能的模块)。

有个阳台(或者通风极好的房间)

我有三只猫,这三只猫需要一个阳台来放置他们的自动猫砂盆,让他们也可以有更好的装扮。

三分离或干湿分离的卫生间

干湿分离或三分离可以让多个人同时洗漱,同时也不会让干区受淋浴影响,变得太湿。

如果可以的话,最好是多个卫生间,这样早上起来不抢….

软装

置物柜

我是一个有很多杂物的人(有太多的爱好),所以需要足够的置物柜和空间,以便于放置东西。置物柜内部最好也是有一个个的篮子,方便从里面拿东西。

单人床/可睡觉的沙发

我的工作习惯是全身贯注把精力用完,然后快速休息,睡一觉起来继续干。因此,书房有一个可以睡觉,但不要太舒服(会睡很久)的单人床,是必要的。

家电

空调

所有房间必须都要有空调(卧室、空调,甚至是厨房)。有可能最终会发现中央空调是最好的选项。一定要有,极端温度和天气越来越多,还是有必要保证每个房间都有空调的。

(当然,身在北方,同样需要暖气系统,来让房间在冬天更暖和)

冰箱

500 L 以上的冰箱。自打成了山姆的会员后,我开始喜欢采购一些青菜沙拉之类的视频,山姆的食品都是大份,小的冰箱确实放不下。租房常见的 100 L / 200L 的冰箱总是太小了。

如果可以的话,选择一个带制冰功能的冰箱,这样就可以不用专门买制冰机了。

制冰机

作为一个咖啡/茶叶/各种饮品爱好者, “喝冰的”,是我的核心需求,所以家中需要有个制冰机,以对抗炎炎夏日。如果冰箱提供了制冰功能,就不用再单独买制冰机了。

饮水机

夏天要多喝水,冬天更要多喝水。作为一个饮品爱好者,饮水机是必不可少的。且,饮水机应该是同时能够制冷和制热的饮水机,这样才能适配动态和夏天的不同情况,满足喝水的需要。

多喝水,少喝饮料。

洗烘一体机

洗衣机和晾衣服是一个麻烦事,如果能够有洗烘一体机(或者两台也 OK),可以让我免去需要用阳台来挂衣服。一方面,更加体面(别人来拜访时看不到你的房子中的那些衣物);另一方面,也可以让衣服变得更柔软和舒服。

洗碗机

做饭是我喜欢的,但洗碗不是。我身边有买洗碗机的同学都给我反馈洗碗机带来的生活幸福指数很高。因此,我也一直想要购买。但洗碗机需要在装修的时候装上(对水有依赖),所以,组房不太合适,就只能期待买房可以解决了。

智能门锁

智能门锁意味着出门不再需要带钥匙,只要刷指纹、输入密码,就可以进入家门,再也不用担心钥匙丢掉了。再配合数字门禁卡,进小区也不需要门禁卡。

智能窗帘(米家窗帘伴侣)

我享受重磅窗帘的强力遮光效果,但同时,也希望能够在早晨被自然光照醒,那么能够在晚上不影响睡觉,早上又能自动打开的智能窗帘伴侣就是必备产品了。

网络环境

NAS + 路由

我自己是有不少项目数据要存储的,NAS 是我需要的,因此家里必然会有一个 NAS,相应的网络基建也是需要的(比如千兆网)。

更多约束,To Be Continue…

什么是 Hackathon 以及在 Hackathon 当中取得更好的名次的小技巧

people doing office works

这个分享是我在 2024 年 5 月份的飞书 AI 训练营的分享,我觉得这个 PPT 的内容可以完美的诠释我对于 Hackathon 的态度,所以除了视频,我将文字稿也完整的撰写出来,希望让这篇文章对 Hackathon 感兴趣的你,能够有些帮助。

视频版可以在 BilibiliYoutube 找到。


什么是 Hackathon?

5e70b9cc82dbaf59c5fbfb19c1c488ce

Hackathon 是一个起源于美国硅谷地区的创新技术活动,来自不同背景、技术各异的天才开发者们会现场组队,在 24 小时内进行代码开发、创造新的产品,以解决某一个具体的行业难题或痛点。

当然,得益于技术基建的发展,Hackathon 不再是工程师、开发者们的专属,借助于各种 Low Code、Zero Code 工具,非技术人员也可以打造出一个产品,来解决一个具体的问题。

Hackathon 的三大特点

7463ba38c49de8883d69ee00a93adb06

Hackathon 有三个非常显著的特点,也是我个人非常喜欢 Hackathon 的原因:

  1. 短时高强度:Hackathon 往往是有时间限制的,一般是 24 ~ 72 小时之间。这个是我认为 Hackathon 最重要的特性。
  2. 开放:Hackathon 会更加的开放,无论你是什么背景,都可以在这里找到合适的队伍参与到其中。即使你的 Day Job 是一个设计师,但在 Hackathon 里,你一样可以是一个产品经理。
  3. 从零到一:Hackathon 一个很大的好处是给了大家一个从 0 到 1 的机会,你可以从 0 到 1 的打造一款产品,这对于在公司里往往只能做 1~100 中的某一小部分增量价值的打工人来说,颇为难得,可以帮助你获得在企业中无法获得的经验和视角。

我进一步解释一下我为什么认为短时高强度是 Hackathon 的精髓。

如果你做过力量训练,就知道有效的力量训练是让你在短时间内做最大力量的练习,以让你的肌肉发力,直至断裂的效果,并通过休息来让肌肉组织重新生长和链接。而Hackathon就有类似的效果,让你在一个很短的时间内去做一个看似不可能的事情,通过在这个极短时间内做事,来实现锻炼的效果。当你完成 Hackathon 之后,就可以复盘自己在 Hackathon 中的所作所为,并一次优化自己的下一步动作。

而且,因为Hackathon 本身的开放性,你可以在不同的 Hackathon 当中去锻炼不同的能力,第一场可以锻炼开发能力、第二场锻炼产品能力、第三场锻炼运营能力,以此类推,逐步把自己的各项能力的短板完成补上。

短时高强度另外的一个好处,便是沉默成本可控。我每次参加 Hackathon 的时候,都抱着:大不了这两天就浪费了的心态参加 Hackathon,因为就算我这次 Hackathon 一无所获,我也不过是浪费了 24 小时,周末在家躺平刷抖音也是浪费 24 小时,又会亏到哪里呢?而实际上,当我抱着这样的心态去参加 Hackathon,再配合自己多次参加 Hackathon 的经验进行一些基础的设计,我大部分时候都是有所收获的,甚至是大有所收获。

为什么“你”应该参加 Hackathon

上面说了 Hackathon 的特点,接下来说说“你”为什么应该参加 Hackathon

为了学习新的技能

  • Hackathon 是一个很好的学习新技能的机会:因为没有人会预期你会做的特别牛逼,反而能够让你放下自己内心的戒备,以空杯心态,认真学习新的技能。同时, Hackathon 因为是从 0 到 1,你可以试一试一些新的产品、技术方案。
  • Hackathon 是一个很好锻炼自己的创新思维的机会:Hackathon 不是日常工作,会让我们跳出当下的工作,抬头看路,看看还有什么新的可能性。而且,当你做一件事的事情被限制在一个特定的时间内,为了达成目标,你可能会爆发出你自己难以想象的潜力。
  • Hackathon 是一个很好的探索自己边界的机会:Hackathon 当中的组队只有分工,没有职位,你完全可以在 Hackathon 当中,试着去换不同的岗位来做事。比如你的日常工作是工程师,那不妨在 Hackathon 当中试着去做一个产品经理,换个视角来做事。
  • Hackathon 是有奖项的,如果可能的话,赢得一个奖项,也是不错的收获。随着 Hackathon 在国内的大行其道,不少的投资团队也会参与到 Hackathon 当中,你的项目甚至有可能会被投资人看中,给你一笔钱,让你全职做这个项目。
  • Hackathon 可以帮助你建立新的友谊关系:在平日里,我们扩展朋友的机会可能不多,Hackathon 是一个很好的机会,你可以认识新的人,了解不同人的思维风格和习惯,并通过 Hackathon 共同协作,达成战斗友谊。比如我自己之前和一个伙伴合作,参加了一次 Hackathon(当然,也拿了奖),在Hackathon 结束之后,我们又合作了一次,搞出了一个新的项目,数据还非常不错。如果没有 Hackathon,我们可能从一开始就不会认识,更别提合作项目了。

如何选择 Hackathon 主题

当你确定要参加一场 Hackathon 之后,马上就会面临组队和选题的问题了。组队不多说,每个人都有自己的风格,你可以选择强强联合,也可以选择百花齐放,自己喜欢就行,也往往不会成为大家困扰的内容。

而选主题往往会成为大家最困扰的问题,毕竟日常的工作当中,我们往往是在做命题作文,很少让你去自主命题。但 Hackathon 往往是不预设主题的,你需要自己去研究、发现,找到合适的主题。

从我自己的经验而言:

  • 如果你没有主题和想法,那么首先可以选择在日常工作中困扰你的主题,这类主题很适合在 Hackathon 当中解决掉。如果你搞定了但没拿奖,至少可以提升自己的工作效率;如果你搞定了且拿到奖,那就是双喜临门!
  • 其次,是选择那些你自己特有的、细分的、具有行业 Know How 的问题,这比你去解决一些更通用的问题产生的价值会更大,且你能够做的更好。如果一个医学背景和一个计算机背景的人同样去做一个医学领域的问答工具,那么医学背景的人肯定会比计算机同学做出来的东西更有价值,因为他更懂行业中到底有什么问题。
4ede7b9387234f30a091401d39586a5d

当然,找到这些问题可能不代表你马上会选择,很多时候,我们会担心自己选择的问题很小,不值得我们去解决。这里我的观点是:问题大小并不是关键,关键在于这个问题是否有价值,以及你是否能够在 Hackathon 的时间范围内解决它。毕竟没有人预期你会在一个 Hackathon 当中解决光刻机的问题。

当你真的打算去解决这个问题的时候,如果无法判断自己的问题是否有价值,一个最简单的方法是,先想清楚自己要解决谁的问题,然后找到符合这个画像的人,去问问他,给他提供这样的解决方案,是否可以满足他的问题。

77d11b8c3e5a43447b006c763082e175

Hackathon 中的项目管理

对于没有项目管理经验的人来说,Hackathon 是一个完美锻炼自己项目管理能力的试炼场。因为这是一个资源有限(3~5个人,24~72小时,满打满算 15 人天),同时 DDL 明确、目标明确的项目。

你需要在项目的开始时,找到项目最重要的P0、P1、P2,并安排好人、事物,让大家知道自己在什么时候应该做什么事情。此外,你还需要为项目规划合理的 Milestone,以便于检查项目的执行情况,降低风险,并尽早的发现风险点位,解决风险。

当你能够做好一个 Hackathon 项目的项目管理,那么对于一些小团队内部协作的项目管理,你便有了基础的经验,下次自己去做项目的时候,也就不会那么的焦虑。

5cf6bc1ed7aeb1dab4e4d37d6d0e3c4b

Hackathon 中的项目路演

在 Hackathon 的最后,一般是项目的路演。对于路演,我只有一句忠告:“项目路演很重要,要当成一件事来规划”。

我们在 Hackathon 的前半程都是在设计和实现产品,是一个”做产品“的过程,而路演,则是”卖产品“的过程,你要让评委 Buy in,让你的目标受众 Buy in。在 Hackathon 当中,你即要能做产品,也要能卖产品。毕竟,现在是一个酒香也怕巷子深的时代

把路演当成一件事,提前规划和留出时间做你的演示文稿,可以有效降低你在路演过程中的风险,同时如果可以的话,至少演练 1~2次你的演示文稿,以确保每个视频\动图\文字都是正确且易于理解的。

在你的路演过程中,如果有一些演示,可以用录制好的动图、视频,这样可以从整个过程中“偷时间”,将真实的产品演示放在最后,这样如果你的路演还不错,评委会给你时间让你演示完,以查看实际的效果,你就有了更多的时间去表达自己的主张。

以及,提前想想,假设你是评委,你会怎么挑战自己的项目?这样提前做好准备,就能更好的去应对评委的提问。

总结

以上的这些,是我自己参加 Hackathon的一些经验分享。希望能帮到你,同时,也希望你能享受 Hackathon,感受 Hackathon 的魅力,把 Hackathon 当成一种生活方式来体验。

住院须知

empty hospital bed inside room

最近因为锁骨上的取出,住了一次院。虽然我自己在同一家医院住过,但依然还是犯了不少的错。因此把我自己认为的一些需要注意的住院须知记录下来,希望帮助到从未住院过的你。当然,如果可以,别住院。

为什么要住院?

实际上住院有很多种不同的情况,一般来说,两种:

  1. 突发意外:这种情况下你往往是通过 120 / 突发事件住院的,你的病情可能不足以支撑你再回家好好准备一下具体的东西,那么就直接看下面的 Checklist,美团外卖采购吧。
  2. 计划住院:不管是从门诊转住院还是复查转住院,意味着你都是有计划有节奏的住院,那就做好准备,带好必要的东西,再来住院吧!

两种不同的情况意味着你可能遭遇的问题和需要准备的物资不同,但有两个东西大概率是相同的:

  1. 身份证 / 社保卡:医院需要建档,所以这些东西必不可少。
  2. 钱 / 现金:医院里可能会有各种开支项目(和医保无关的),所以需要准备点钱,最好手头还有个 100~200 现金。

住院会用到哪些东西?

从我自己的经验来看,我认为住院你需要带的东西如下:

  1. 一套衣服:(入院的时候穿半天,出院的时候穿半天),当然,也可以带两套,反正不会特别占地方。办理完住院手续后,一般情况下你会有病号服,护士也会要求你穿病号服,所以你自己带的衣服大概率是穿不到的。所以,衣服不用带太多。
  2. 拖鞋:住院期间,你是会起床走动的(腿部有病的另说),你需要一个拖鞋,这样你在住院期间就无需总是频繁的穿鞋拖鞋,直接套在脚上就能走。
  3. 不锈钢饭盒:住院期间,你可能会选择吃医院的病号饭,那么你就需要一个不锈钢饭盒,以便于去打饭(因为并不是每个医院都提供一次性餐具的)。当然,现在其实外卖也非常方便,你完全可以餐餐点外卖,只是这个有个前提(你得有人能出住院区去取外卖,一般是陪护人员)。
  4. 卫生纸 & 普通手口湿巾(无酒精):卫生纸是上厕所、擦桌子可能用到,湿巾则是你擦自己的身子用的,毕竟在医院里,如果你住院了,身上有伤口,大概率是没办法洗澡的,这意味着你需要时不时用湿巾擦擦身子,以保持身体的清爽。
  5. 酒精湿巾:酒精湿巾主要的目的是消毒,比如你在吃饭前,拿酒精湿巾擦一遍你的不锈钢饭盒,可能会对于你自己的饮食安全提供一层保障。
  6. 充电器:你去医院不玩手机么?如果玩,就带上。记得把你的手机、手表、耳机之类的充电器都带上,别遗漏。
  7. 降温/保温产品:医院的空调往往都是照着大众的体感来调整的,同一间病房可能会面对有的人热有的人冷的问题。如果你怕热/怕冷,别忘了带一些降温/保温的产品,以便于无法微调时,满足自己的需要。

除了上述用品之外,根据你的病症可能还会有不同的选择,比如如果你无法下床,那么可能意味着你需要买尿壶,以及成人尿垫,以便于自己在无法起身的情况下完成排泄。但这些当你真正需要住院的时候,问一嘴医生,大概率也会告诉你。

除了上述的这些住院期间能用到的物品,还推荐你带一个文件袋,这样当你入院的时候,可以把押金条之类的东西放在这个文件袋里,方便出院的时候找。同时当你出院的时候,可以把收据、详单之类的放在这个文件袋里,后续用的时候好找。

当然,你也可以选择全程用钱开道,外卖平台上买就完了。

解决因为 SSL 导致的 WordPress 后台无限 Redirect 的问题

silver mercedes benz emblem on blue surface

在使用 CapRover 并配置域名为 HTTPs 域名时,在你访问管理后台时,可能会导致触发Chrome 自己的无限 Redirect 的问题。

之所以出现这个问题,是因为 CapRover 的架构导致的:CapRover 在最外层是一个 Nginx,SSL 证书也是在这一层完成的。而 CapRover 的默认配置,在将请求向后转发时,透传的域名会是不含 HTTPs 的协议标识的,导致 WordPress 认为发来的请求是非加密的。

d2b5ca33bd970f64a6301fa75ae2eb22 18

而 WordPress 识别到你的请求未加密,就会返回 302 让你进入 HTTPS的链接。但新的请求并不会带上 HTTPs 的标识,导致进入无限循环。

解决这个问题的一个简单处理的方式是 — 在你的 wp-config.php 中加入如下代码,来告诉 WordPress,这个请求已经是 HTTPs 保护的了,你直接处理就好。

/* for ssl in docker */

define('FORCE_SSL_LOGIN',true);

define('FORCE_SSL_ADMIN',true);

$_SERVER['HTTPS'] = 'on';
Code language: PHP (php)

给孩子用的 AI 工具

a close up of a computer screen with a purple background

今天参加一个线下活动,和朋友聊起来对于 AI 的恐惧和焦虑,问我该不该引导孩子去接触这一轮的 AGI 工具、接触这些 AI 工具。

我给了一些建议:首先,我认为我们应该给孩子接触 AI 工具。AI 的大趋势是不可逆的,基于这个前提,我们不应该抗拒孩子去接触 AI,甚至应该尽早的让孩子去建立 AI 的认知,知道什么是 AI 能做的,什么是 AI 不能做的,已经应该明确 AI 和 人类的价值边界。

用法

在聊天过程中,我们聊到了如何用 AI,我自己的观点是:

我们需要让孩子知道如何提问,以及区分出它是工具还是目的。工具掌握用法,并要明确我们的目的是什么。

剩下的,让他自己去玩就好啦。

工具

基于上述的认知,我认为现在可以推荐的工具如下:

ChatGPT

如果可以,当然是给孩子用最好的。但这个有门槛,以及作为家长,你可能要考虑 ChatGPT 本身是有风险的,可能会输出一些你不希望的内容(比如色情、暴力之类的)。

推荐程度: 5 🌟。

Perplexity

AI 搜索,体验很不错。如果孩子有搜索和探索的欲望,那么这个可能会比 Google 会是一个更好的体验。

推荐程度:5🌟

MetaSO

秘塔搜索的研究模式,比较适合孩子做一些方向的研究。可以让孩子在日常学习和生活过程中,有问题,提问。

推荐程度:5🌟。

Other things

在和这个家长聊的时候,发现现在缺乏一个 For 家庭教育场景下的GPT产品。这个产品的客户是家长,用户则是孩子。

和标准的大模型 、 产品之类的区别,是提供一些家长控制能力,这样会让家长们减少焦虑。

但我内心的另外一个声音告诉我:真的做出来,可能孩子也不会用,更好的办法是在现有的产品上加入家长控制模式。

鱼跃 Anytime CT 15 血糖监测仪体验 & 个人心得分享

white One Touch at 6.7 remote

本文内容仅作为个人体验分享,不作为任何医疗建议提供。如已有相关疾病,建议尽快就医咨询医生。

CGM(Continuous glucose monitor)是指持续血糖检测仪,在下文中,指我自己购买的鱼跃 AnyTime CT15 血糖监测仪。

个人使用体验

在详细介绍我和 CGM 的故事之前,我想和你聊聊个人的使用体验。

这 14 天的持续监测,对我来说是很不一样的,我经历过一开始的恐慌期(一开始因为适应的原因,导致我把自己吓了一跳)到小心翼翼期(担心胖胖的自己把设备给压坏了、担心洗澡会让设备失灵)再到无所谓期(把 CGM 当成日常来使用,不再担心会影响到 CGM 设备)心态变化还是挺大的。

在使用整个 CGM 的过程中,我自己的认知也得到了更新,比如:过去我一直以为我的血糖是稳定在一个点位上(毕竟空腹血糖也只取一个点),但实际上,血糖是在不断波动的,只不过是在安全的范围内不断波动。经过佩戴 CGM 的这 14 天,我也变得能够更加坦然地和自己的血糖和谐相处的过程(当然,我的血糖其实没啥问题hhh,倒也没有到病的阶段)。

作为一个个体,在经历过 CGM 的体验后,我认为:

  • 如果持续使用 CGM,那么他只适用于糖尿病患者:这句看似是废话,但我想表达的是,绝大多数人的血糖波动范围,完全没必要关注血糖波动。现有的 CGM 的设计基本上也是服务于糖尿病患者的保命需求的。普通人用起来可能没啥太大的感觉。糖尿病患者使用 CGM 主要也是因为扎手指太疼、有感染风险、没办法比较高频采集数据,不然其实指尖采血也挺好的。从痛感的视角来看,CGM 的痛感更轻,且只需要痛一次,更适合持续使用。
  • 如果是体验 CGM 的话,那么我推荐你可以买一个试试:血糖的监控就如同血压、体温、心率等一系列监控,可以给你提供一个不同的指标。特别是肥胖率日渐增长的中国,监控一下自己的日常饮食会给自己的身体带来的变化,对于你更好的理解自己的饮食有很大的帮助。¥299 的价格,属于可以考虑尝试一次的范围。

对于我自己而言,我这一次使用了 CGM,短时间我可能不会继续购买 CGM 设备了(如我上面所述),但如果我再需要监测我自己的血糖的时候,我想来也不会对于 CGM 有太多的恐惧,可以坦然面对使用 CGM。


过程全记录

缘起

作为一个曾经撰写《自我量化指南》的人,对于自身数据、各项指标的探索从未止步。我长期佩戴 Apple Watch,便是为了追求自身的各项指标的收集。最近在听无人知晓的 EP34 ,孟岩对话顾中一这一期时,孟岩提到了,他自己在佩戴持续血糖检测仪(CGM),让我产生了好奇心和兴趣:我是不是也可以使用这样的工具来检测自己的血糖?

d2b5ca33bd970f64a6301fa75ae2eb22 1

我并不是全无接触过血糖检测设备,实际上我过去曾购买过鱼跃的血糖检测仪,但我之前购买的是采用指尖采血的血糖仪,需要你有毅力给自己的指尖破一个小洞,采血并进行检验。从自我量化的视角来看,倒也并非不可接受 —— 我并不需要那么多的血糖数据埋点,对么?但毕竟要出血,且要带酒精棉片、采血针等一系列设备,属实麻烦。所以这个血糖仪如今也在我的医疗箱里吃灰。

CGM 作为一个可以持续佩戴的产品,让我想要试试,刚好这次听播客被勾起了兴趣。那就试试吧!

购买

既然已经决定了要购买,那说买就买。在经过一番搜索和研究之后,我最终选择了鱼跃(Yuwell)家的动态血糖仪 CT15 。虽然在这个领域,更加专业的可能是雅培,国内的也有三诺、微泰等企业,但对于我来说,最重要的是 鱼跃的 App 可以和 Apple Health 打通,将数据透传给 Apple Health。这样未来我就可以把我自己的各种数据都汇总起来进行分析和消费。

做出了选择,接下来就很简单,我在拼多多上下单了鱼跃 CT15 血糖仪,并在 4.24 日拿到了这个设备(然后在当天给自己装上了它)。

d2b5ca33bd970f64a6301fa75ae2eb22 7

安装鱼跃 CT15

收到货后,拆开快递后,我拿到了两个设备,一个是有点像 Airpods 的 蓝牙发射器 & 充电底座;另外一个则是真正插入体内的传感器及其辅助发射器。

5vvd4g
收到的设备

拆开后,大概是这样的:

d2b5ca33bd970f64a6301fa75ae2eb22 8
蓝牙发射器 & 底座
d2b5ca33bd970f64a6301fa75ae2eb22 9
传感器 & 辅助植入设备
d2b5ca33bd970f64a6301fa75ae2eb22 2
传感器底部的标签

安装不复杂:

  1. 先在手机上下载安耐糖的 App;
  2. 确认你自己要安装的部位,你可以选择手臂后方或腰部。根据自己的习惯选择即可。我最终选择的是手臂后方(主要是我有趴着睡的习惯,放在腰腹部担心压坏)。
  3. 链接 App & 蓝牙发射设备。
  4. 对植入部位使用酒精消毒。
  5. 使用辅助植入器植入设备。
  6. 将蓝牙发射器和传感器组装起来。

更加详细的安装过程,我直接把官方的视频搞下来了,你可以看这个视频快速了解安装的链路。

安装完成后,大概是这样的:

d2b5ca33bd970f64a6301fa75ae2eb22 10

数据监测 ing

设备安装好后,接下来就是持续性监测这个数据 & 指标了。

坦白来讲,设备装上的第一天我是把自己吓到了,因为监测到了我有史以来最高的血糖值 — 11.6(我差点就给自己确诊糖尿病了),在给自己上 CGM 的那个晚上,我看了不少的二型糖尿病防治指南(放在最后了hhh)。

9232b01d0fb1ad6abf7e9b947b94e4d7
第一天记录到的 11.6 的巨高数据

不过,经过一天的适应,在第二天,我的血糖进入了常规的阶段,慢慢的,我的心态也没有那么慌了(所以提醒大家,即使 CT15 这样不需要额外校准的设备,也有可能会存在初期数据不准的问题,如果看到了一个非常夸张的数字,不要慌让他再抓一些数据看看。

d2b5ca33bd970f64a6301fa75ae2eb22 12
第一天的血糖
d2b5ca33bd970f64a6301fa75ae2eb22 14
第二天的血糖

接下来的每天的日常就是让他自己跑数据,监测一下自己的血糖变化。安耐糖的 App 提供了血糖变化数据,方便你看到你的数据变化范围,是否在你预设的血糖范围内等一细节数据,方便你快速了解自己的血糖情况。

b555bc2dba39cab693734ece65408b1e 1
安耐糖的主界面

取出设备

当时间走到 5 月份时,我佩戴 CGM 也满 14 天了,就必须要取下设备(设备的设计监测周期是 14 天),取下的过程非常简单,先按下传感器的卡扣,取下蓝牙发射器,然后去除传感器周围的胶布拔下传感器即可。

在没有取下来之前,我对于 CGM 的体内植入深度没啥感觉(虽然说明书上已经说了 5~10 mm),但当你真的看到这个探针,并意识到这个探针已经在你体内 14 天时,还是有点惊悚的…

d2b5ca33bd970f64a6301fa75ae2eb22 15

数据分析

数据采集只是手段,归根结底,我们是希望用数据指引我们做决策。血糖分析也是如此。一方面, 你可以直接查看安耐糖上的一些数据来观测自身的指标,另一方面,安耐糖也提供了官方的报告解读的服务。

当你的设备取下后,官方会拉个微信群给你做一下基本的报告解读,简单分析一下你的情况,会得到如下的报告内容。

nafg1c

一些你可能关注的问题

误差?

CGM 的原理是基于组织液的数据采集 + 算法的方式来计算出你的实时血糖。这个原理决定了它的数据注定不是真正意义上的精确值。刚好在最后几天,我参加了中关村的四高共管项目,基于指尖采血血糖仪的数据,和 CGM 的数据做了对比。在实际测试过程中发现,CGM 和指尖血糖仪的数据大概有 0.5 左右的误差。

但,作为一个可以持续监测的设备,0.5 的误差在我看来是可接受的范围。毕竟可以帮助我们监控自己的血糖,了解不同食物带来的影响,还是有其价值的。

洗澡?

从我自己的体验来看,洗澡(淋浴)是完全不影响 CGM 的,你可以放心的购买 & 使用。也合理,毕竟要在身上放 14 天,厂商也需要考虑这个问题。

按压?

安装上之后,基本上不会有什么问题,直接用即可。我自己体验下来看,只要不是硬破坏,其实没那么容易出问题。

感染?

坦白来讲,CGM 是存在感染的风险的。毕竟是有创的,我们能做的是尽可能降低感染的风险,比如在植入前用酒精棉擦拭植入区域;比如擦拭完就赶快植入,别等着。

创口?

CGM 的探针比较细,所以创口和痛感也都不强烈。从我自己的个人体感而言的话,比指尖采血的疼痛度还要小一点。

d2b5ca33bd970f64a6301fa75ae2eb22 17

医用胶布使用指南

你可能会担心,传感器容易掉怎么办?从我自己的体验来看,不太会容易掉,此外,安耐糖会送一个加固胶布,你配合上加固胶布,基本上没有掉下来的可能性。

持续使用成本

在上面提到,CGM 智能连续使用 14 天,对于一个日常监测的人来说,必然是每两周要更换一次的,所以就需要持续购买耗材,传感器作为一次性用品,每个买下来大概是在 250 元,一年持续监测下来的话,成本还是比较高的,一年需要 250 * (52/2) = 6500 元左右,批量购买可能可以控制在 6000 以内,成本不低。但考虑到这玩意是用来保命的,倒也合理。

d2b5ca33bd970f64a6301fa75ae2eb22

二型糖尿病防治指南

延展阅读

https://sspai.com/post/77324

https://sspai.com/post/77348

Chinese-Calendar: 一个帮助你判断今天是不是工作日的 Pypi 包

person holding sticky note

在开发过程中,你可能会需要实现某些和工作日相关的特性(比如,工作日才发某些通知 /推送),这个时候,你可以借助于 chinese_calendar 这个包,来查看当前是否是工作日,你可以引入 chinese_calendar 这个包,来实现判断今天是否是工作日。

可以参考如下代码,is_workday_today 返回 True 时,就是工作日,就需要执行某些特定的逻辑。

from datetime import datetime
from chinese_calendar import  is_workday

# https://github.com/LKI/chinese-calendar
def is_workday_today():
    today = datetime.now();
    return is_workday(today)
Code language: Python (python)

介绍一下 Read it!

pile of assorted-title books

每年我都会给自己开一些新的坑,用于探索新的技术方向、新的领域。2024 年,我的新项目是 —— Read it!

Read it! 是一个用于分享我自己觉得不错的文章、网站的地方, 你可以在这里看到我日常浏览网页过程中发现的不错的网站、文章。

我会在分享链接的过程中,加上一些我自己的看法、总结。

如何使用 Read it!

  • 网页浏览: Read it! 是一个网站,所以你只需要打开浏览器,访问 readit.ixiqin.com,就可以看到我分享的网站。
  • RSS 订阅:作为一个古早 RSS 爱好者, 你可以直接在你的 RSS 里订阅 Read it! ,将 https://readit.ixiqin.com/rss/bookmarks/ 贴在你的 RSS 阅读器里,就可以查看到它。

为什么会有 Read it!

我是湾区日报的读者,也很喜欢湾区日报的形式。包括过去也尝试过用 WordPress 之类的系统来搭建类似的形态。但,繁琐的操作会消磨我分享的耐心。

最近又在整理书签,加上也开始进行一些大模型应用的开发,所以决定借助大模型来帮助我自己完成一些工作,就重新搞起了 Read it! 这个项目。

Read it! 目前的工作模式挺简单的,我找到觉得不错的文章,直接在 IM 里发给他,他会自动解析我的意图,并将解析出来的结果录入到系统当中,给大家看。想来这样的交互可以让这个项目活得更久一些~

d2b5ca33bd970f64a6301fa75ae2eb22 15
流程说明

Read it! 会分享什么?

Read it! 可以理解为是我自己再看的各种文章,所以并不会局限领域、方向,只要是我自己看的觉得有收获的,我都会分享。后续会考虑提供分标签的订阅方式,这样你可以选择只订阅自己喜欢的文章。

CapRover 如何停止服务,并进行硬盘扩容/维护

34456427bc43e44f517b4eece861c6f5

在一开始使用 CapRover 时,我使用的是一个 10 GB 的数据盘,但在部署了诸多应用后,10GB 的数据盘已经无法满足我的需求,于是我就对其进行了扩容,扩容至 20GB。在完成扩容 & 重启后,仍需要执行 Linux 的扩容命令 resize2fs 来扩容硬盘。

但由于 CapRover 中运行的服务跑在这个数据盘上,并没有办法直接在这个数据盘上进行扩容(进程会持续读取文件),因此,需要先将 CapRover 上的服务暂停,暂停后进行扩容,并重新启动服务。

CapRover 底层是使用 Docker Swarm + Nginx 来进行的,因此,我们只需要使用 Docker Swarm 的命令,来停止服务运行即可。

1. 获取服务名称

首先,你需要先获取到当前所有在跑的服务,以便于稍后去暂停。执行 docker service ls 来获取到具体的服务名称。

d2b5ca33bd970f64a6301fa75ae2eb22 13

2. 拼接所需的命令

在 Docker Swarm 当中,并没有直接的 Start or Stop 概念,而是通过将 Replica 设置为 0 来实现关闭的能力。这个命令可以通过 docker service scale 服务名=服务数 来实现。因此,你需要将对应的服务设置为 0 来解决这个问题。你可以先行把开启和停止的命令拼接好,从而实现快速的启动和关闭,尽可能的减少宕机时间。

如果是有多个服务,可以直接拼接在后面,从而实现一次关闭 / 开启多个服务。

# docker service scale service_name=1 service_name_2=0
# 停止命令
docker service scale srv-captain--blog-ixiqin-com=0 srv-captain--mysql-8-production-db=0 srv-captain--pgsql-16-production=0 srv-captain--redis-server-production=0
# 启动命令
docker service scale srv-captain--blog-ixiqin-com=1 srv-captain--mysql-8-production-db=1 srv-captain--pgsql-16-production=1 srv-captain--redis-server-production=1
Code language: Bash (bash)

3. 执行命令,扩容硬盘

你可以先执行停止命令,然后执行扩容命令。完成扩容后,重新启动,即可完成整体的扩容。

使用 CapRover WebHook 获得类 Vercel 部署体验

34456427bc43e44f517b4eece861c6f5

我在开发前端应用的时候,基本上使用的都是 Vercel ,究其原因,主要是以下几个点:

  1. Vercel 可以方便的与 Github 整合,提供简单易用的部署方式:写完代码,测试完成后推送到 Github ,就会自动部署到线上。对于小型项目来说,可以简化部署的流程。
  2. Vercel 提供了自定义域名和自动配置的 SSL,提供了简单的配置方式:在现在 SSL 成为标配的模式下,在 Vercel 你只需要把域名解析到 Vercel ,并在你的 Project 当中绑定域名,就会自动完成域名绑定和 SSL 申请和续期。
  3. Vercel 提供了 FaaS 环境:写应用的时候,很多时候不只有前端的需求,这个时候, Vercel 自身的提供的 FaaS 环境可以帮助你完成基本逻辑的编写。

但 Vercel 毕竟是以前端为主,且函数运行时长也有限制,对于一些比较重的场景下,Vercel 还是不太够用。刚好最近我把服务部署从传统的 LAMP 换成了 Docker Based PaaS,我使用的 CapRover 提供了类似的体验。

使用 Cap Rover 你能获得的体验:

  • 上传代码后,自动部署到 Production
  • 绑定域名后,自动配置 SSL 证书,且可以配置其他域名转发到主域名

具体操作步骤见下:

安装 CapRover

CapRover 的安装我就不再赘述,跟随官方的说明安装即可。

绑定根域名

当你登录 CapRover 时,CapRover 会让你绑定一个泛域名解析,你可以根据自己的需要,绑定一个二级或者三级域名,然后在 DNS 解析一个 * 到这个服务器上。这样后续部署的服务就会自动解析一个 服务名.你的域名 ,用于服务的初步访问(类似于 xxx.vercel.app)。

d2b5ca33bd970f64a6301fa75ae2eb22 6

上传代码至 GitHub

在 Github 上创建一个代码仓库,并把你自己的项目部署上去。如果你有已经写好的 Dockerfile,可以一并上传上去。如果没有的话,则可以选择参考 CapRover 提供的 Sample App ,里面提供了常见语言的部署参考。

创建容器并配置环境

完成代码上传后,你可以进入到 CapRover 后台,创建一个新的 App。这里可以输入你喜欢的名字,方便后续查找即可。

d2b5ca33bd970f64a6301fa75ae2eb22 7

创建完成后,点击下方列表中的应用名称,进入应用的配置页面,并切换至 Deployment 页面。

d2b5ca33bd970f64a6301fa75ae2eb22 8

在这个页面,可以找到 Method 3 : Deploy From GitHub/ Bitbucket/Gitlab,填写你的仓库信息、分支名、用户名。密码你可以选择直接使用你的密码,也可以选择创建一个 Personal Access Token ,或者是在仓库里配置一个 Deploy SSH key 均可。

d2b5ca33bd970f64a6301fa75ae2eb22 9

配置完成后,会自动给你生成一个 Webhook 地址,复制这个 Webhook 地址。

d2b5ca33bd970f64a6301fa75ae2eb22 10

配置 Github 上的 WebHook

复制上方的 Webhook 地址,并进入到 Github 你的仓库 – Settings – webhooks 页面,新增一个 Webhook。

d2b5ca33bd970f64a6301fa75ae2eb22 11

粘贴你刚刚复制的 URL,Content Type 选择 application JSON,并在下方选择触发部署的时机。

d2b5ca33bd970f64a6301fa75ae2eb22 12

点击报错。

等待自动部署

接下来你就可以通过提交代码,来让其自动完成部署,从而享受类似于 Vercel 的推送即部署的体验~。

在你的 Github Actions 中添加一个 PostgreSQL 用于测试

black and white penguin toy

在开发应用的时候,我们会选择使用 PostgreSQL 作为数据库进行开发,但在 Github Actions 环境下,默认是没有 PostgreSQL 作为数据库后端的,这个时候如果你想要测试一些和数据库相关的逻辑,就不得不面临两个选择:

  1. 使用一个和生产环境无关的数据库,比如 SQLite。
  2. 在 Github Actions 当中添加一个 PostgreSQL。

前者是大多数常规的做法,大概率也不会出现什么问题(毕竟作为 CURD 仔,我们用的大部分时候都是一些 ORM,很少裸写 SQL),不过依然存在一些概率是你写了一些 PostgreSQL Only 的 Query 无法覆盖到测试。

另外就是本文的核心了:在你的 Github Actions 当中添加一个 PostgreSQL

Github Actions Service

想要实现这个效果,我们依赖了 Github Actions Service Containers 这个能力。

服务容器是 Docker 容器,以简便、可携带的方式托管您可能需要在工作流程中测试或操作应用程序的服务。 例如,您的工作流程可能必须运行需要访问数据库和内存缓存的集成测试。

您可以为工作流程中的每个作业配置服务容器。 GitHub 为工作流中配置的每个服务创建一个新的 Docker 容器,并在作业完成后销毁该服务容器。 作业中的步骤可与属于同一作业的所有服务容器通信。 但是,你不能在组合操作中创建和使用服务容器。

GitHub

你可以选择你需要运行测试的环境中,找到对应的 Job,并在 Job 下新增一个 services ,即可为你的 job 设定一个依赖的服务容器,它可能是数据库 、 缓存之类的。比如我这里用的就是 PostgreSQL。

我的 Github Actions 完整参考:

  • services 是我运行的服务容器。
  • steps 是我的真正的测试流程。
name: Django CI

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

env:
  DEBUG: true
  SECRET_KEY: django-insecure-github-actions
  DB_NAME: postgres
  DB_USER: postgres
  DB_PASSWORD: postgres
  DB_HOST: localhost
  DB_PORT: 5432

jobs:
  build:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres
        env:
          POSTGRES_PASSWORD: postgres
        # Set health checks to wait until postgres has started
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - 5432:5432

    strategy:
      max-parallel: 4
      matrix:
        python-version: [3.12]

    steps:
    - uses: actions/checkout@v3
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v3
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install Dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Run Tests
      run: |
        python manage.py test
Code language: PHP (php)

Thinking in Component Tree

blue red and green letters illustration

在开发前端应用的时候,我比较推荐在真正开始写代码之前试着画一画组件树 / 状态树。

在很多时候,可能你的设计师已经帮你做好了组件树,但在某些场景下,你的设计时并不会帮你拆解组件树,或者是你是直接和产品经理对接,他不会帮你拆解组件树。

这个时候,相比于写代码,我更推荐你先拆解组件树,在完成组件树之后,再开始你的 Coding。

d2b5ca33bd970f64a6301fa75ae2eb22 5

Figma / Sketch 之类的软件提供的分组能力、图层的能力,可以帮助你将组件合理的拆解、分组、归类。当你完成树的建设之后,可以试试看将不同的模块拆解,每个模块是否可以独立正常的运转。如果不可以,则说明你的状态拆解的可能是有问题的。

当你完成拆解之后,只需要按照你拆解出来的树组织你的 Component 即可。

在 WordPress 的 Docker 镜像上加装 Redis 拓展,以支持 Redis 缓存

docker

从 LAMP 到 Docker based PaaS 工具 当中,我提到我现在使用的是 Docker Based PaaS 产品来托管站点。本站目前其实就是跑在 Docker 上的。

使用默认的 WordPress 镜像时,我发现一个问题:没有支持 Redis 拓展!我使用 Redis 来缓存 Query,提升访问的性能。如果缺失了 Redis 拓展,就会减少一部分缓存的能力。于是开始研究如何在官方的 WordPress 镜像上加入 Redis 拓展。

根据 WordPress 镜像的官方说明,我们可以 docker-php-ext-* 命令来配置镜像,安装必要的拓展,来满足我们日常使用的需求,并给出了官方的参考。

不过,我在验证 Redis 拓展时,使用 docker-php-ext-* 命令没有配置成功,好在可以使用 pecl 来安装。于是,我便将 Dockerfile 修改成如下内容,来完成对于 Redis 拓展的安装。

FROM wordpress:latest
RUN pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis

修改好 Dockerfile ,然后重新启动,一切都好了~

d2b5ca33bd970f64a6301fa75ae2eb22 4