一个人的永续职业

fountain pen on black lined paper

每个人在这个社会上都有一个属于自己的职业,这个职业成为别人认知我们的标签。

在过去的几十年里,我们看到,一个人可以从刚毕业做一份工作,一直做到退休。但在如今快节奏的时代当中,我们往往看到的是一个人加入一家公司,工作几年后,又离开这家公司,到一家新的公司去。

我们很难有一个固定的工作和职业来描述自己 —— 你到底是什么职业?

职业带来的收入是其次,关键是职业会给人不同的认知,以及职业是一种身份认同,我们需要依靠身份认同,在社会当中找到自己的位置。

那到底有没有什么职业是可以永续存在的?

对我而言,有三:

  1. 写作者:写作是一个相对稀缺的能力,且随着 AIGC 的出现,越来越多的人不擅长写作。写作的价值反而在提升。且写作对我来说,是一个持续表达的事情,无论如何,我都将持续写作下去。
  2. 创造者:我之前就说过,软件工程师是这个时代的手艺人,你可以使用自己的技能,来创造出一些新鲜的产品出来,去解决别人的问题,打造不同的产品和生态。创造者与你的年龄,工作时间无关,只与你自己是否还愿意创造有关。
  3. 投资者:投资只关乎你买入的资产,并跟随你的资产不断成长。与你的年龄,工作时间等都无关系。任何人都可以成为投资者,也可以一辈子成为投资者。

《高效邮件工作法》书摘

d2b5ca33bd970f64a6301fa75ae2eb22 25
  • 高效能人士最常考虑的就是工作的“主导权”。
  • 高效能人士不喜欢无用功。这里所说的无用功,指的是原本不用做,却因为没有安排好而不得不做的所有工作。
  • 与其排出优先级,不如省下时间着手处理眼前的工作,反而更能迅速完成工作。
  • 例如,你打开的第一封邮件的内容是“请修改网站资料”,大约需要10分钟的时间。这时,如果你手头刚好有别的工作,可能会回复“收到,我会在××点之前处理,请您稍等”。但是高效能人士会先处理这件事。不是说回复“××点之前处理”不对,只是“之后有时间了再处理”这种想法,是拖延的思维,有些危险。从尽快完成工作的角度考虑,了解邮件内容后立刻着手处理更有效率。
  • 其实如果在“3W”的基础上再增加一些信息,邮件的效果会更好。这就是“6W+3H”。先在“3W”上加上“3W”: When……什么时间 Where……什么地点 Whom……对象是谁 再加上“3H”: How to……怎么做 How many……多少 How much……花费多少 利用这些来整理想要传达的信息吧。
  • 总之,回复邮件并不是越快越好,最佳的回复时机要结合“目的”来考虑。
  • 发送的邮件完美无瑕,这是我们的理想。但是如果因为追求完美而错过对方期望收到邮件的时间,这封邮件就失去了它的价值。我认为我们更应该重视速度,为了“目的”,牺牲一点“正确”也无可厚非。这么一想,写邮件时是否会更放松一些?
  • 因此,避免连词的过度使用,是缩短邮件的一个方法。有人觉得连词是邮件不可或缺的,但是即使没有连词,邮件内容也是流畅的。所以果断删除那些不必要的连词吧,上下文的连贯性并不会受到什么影响。
  • 其实想要尽快收到回复并不难。只要根据前文所列的看上去有些棘手的邮件的共同点,反其道而行之即可。具体来说,就是要使邮件内容易读懂、易判断、需求明确。此外,要明确地列举出回复的好处(更进一步说,最好再加上不回复的坏处)。
  • 高效能人士的语感十分敏锐,他们不仅可以准确地传达信息,还会有意识地考虑如何给对方留下好印象。因为就算你传达的信息无误,如果对方对你没有好印象,也不会心情愉悦地与你合作,反而可能拖延工作。要想提高工作效率,仅靠自己的努力是不够的,只有使对方心情愉快地与你合作,才能加快工作进程。
  • 高效能人士很少使用消极的语言,即便在传达消极的内容时,也会尽量使用积极的表达方式。例如,他们会将“按时集合不要迟到”换成“请您预留足够的时间,及时到达集合地点”。再比如,他们会将“请不要随意修改数据”改为“如果需要修改数据,请与负责人联系”。这样一来,不仅不会惹怒对方,还可以使其欣然采取我们所期望的行动。
  • 转换说法时,需要注意的要点很多,其中最关键的就是不要为自己的行为道歉,而要感谢对方的行为。比起“没能接到您的电话,非常抱歉”,“感谢您的来电”更能给人留下好印象。
  • 邮件只能用文字传达信息,因此,要避免对方将信息理解错误。如果遇到信息还没有完全确认就需要发邮件的情况,在前文的案例中,不要写“我认为付款时间是下月末”,而该写成“付款时间是下月末,我向会计确认之后再与您联络”。 当然,对于很多推测、预测、无法断言的内容,如不便断言的战略等,传达前需要事先表明“我预测”、“我个人认为”,或者“我确认一下细节再……”,这样文中就不用反复使用“我认为/我想”的表述了。
  • 话虽如此,胡乱打听却是不智的。这种时候,请使用“在可能的范围内”、“如果方便的话”等表述。
  • 大项目的运行必须事先设定“提前确定信息共享对象”、“工作汇报另行发送邮件”等基本规则。
  • 适合通过电话沟通的情况有: •可以当场回复的事情。 •紧急的事情。 •需要边解说边确认对方的理解程度的事情。 •因为存在感性因素,仅用文字表达容易引起纠纷的事情。 即使对方已经发来邮件,如果你认为电话沟通更快捷或更不容易引起误解,都可以主动进行电话沟通。

Eye Monitor 沉浸式工作打断神器

man covering face with both hands while sitting on bench

写代码最常见的问题是容易太沉浸,一写就是好几个小时不挪窝。 最近发现了一个应用: Eye Monitor ,可以很好的解决沉浸式写代码导致的久坐问题。

它和番茄钟有什么不同?

番茄钟在很多场景下, 也都是实现打断的功效,强制你在一个特定的时间范围内做事 / 休息。但和大多数番茄钟不同的是,这个应用实现了一些有意思的活动算法,来帮你计算时间。而番茄钟则是明确的按时间卡住,不论这段时间你是否有操作,时间到了就是到了。

实现的效果

Eye Monitor 实现的效果就是当你的“疲劳度”达到了 100%,就会给你全屏幕弹窗,强制让你休息。虽然你也可以继续跳过,但跳过本身并不会降低你的疲劳度,只是让你可以短时间的休息一下,然后再次提醒你休息。这个设计是有点意思的。

8n7rqv

比如,这是我的休息统计,可以看到疲劳值会增加,中间如果你有休息,疲劳值则会降低,再次开始 Coding 则会再次提交。除了可以用来提醒自己休息,还可以不定时的看看自己什么时候在 Happy Hacking,什么时候在摸鱼~

40muwy

ACME.sh 续签不成功下的 Debug 记录

a computer screen with a remote control on it

我的域名证书目前基本上 100% 使用 acme.sh,免费大碗,唯一的问题是需要续签。对于一些涉及到 CDN 场景的可能不太友好。不过我的 CDN 往往也不太使用主域名,所以也可以接受。

最近在给一个域名续签的时候,出现了报错的问题

续签代码:

 "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh"
Code language: JavaScript (javascript)

报错如下:

[Sun Aug 13 06:02:43 PM CST 2023] Renew: 'replace.com'
[Sun Aug 13 06:02:43 PM CST 2023] Renew to Le_API=https://acme.zerossl.com/v2/DV90
[Sun Aug 13 06:02:43 PM CST 2023] Using CA: https://acme.zerossl.com/v2/DV90
[Sun Aug 13 06:02:44 PM CST 2023] Multi domain='DNS:replace.com,DNS:feishu.io'
[Sun Aug 13 06:02:44 PM CST 2023] Getting domain auth token for each domain
[Sun Aug 13 06:02:48 PM CST 2023] Getting webroot for domain='replace.com'
[Sun Aug 13 06:02:48 PM CST 2023] Getting webroot for domain='feishu.io'
[Sun Aug 13 06:02:48 PM CST 2023] Verifying: replace.com
[Sun Aug 13 06:02:49 PM CST 2023] Processing, The CA is processing your order, please just wait. (1/30)
[Sun Aug 13 06:02:53 PM CST 2023] replace.com:Verify error:"error":{
[Sun Aug 13 06:02:53 PM CST 2023] Please add '--debug' or '--log' to check more details.
[Sun Aug 13 06:02:53 PM CST 2023] See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh
[Sun Aug 13 06:02:55 PM CST 2023] Error renew replace.com.
Code language: JavaScript (javascript)

在出现问题之后,可以通过在命令中添加 --debug 的方式,来实现查看响应的日志,debug 的命令如下:

 "/root/.acme.sh"/acme.sh --cron --debug --home "/root/.acme.sh"
Code language: JavaScript (javascript)

则在新的输出中,说明了我具体卡在哪里了

[Sun Aug 13 06:04:49 PM CST 2023] replace.com:Verify error:"error":{
[Sun Aug 13 06:04:49 PM CST 2023] Debug: get token url.
[Sun Aug 13 06:04:49 PM CST 2023] GET
[Sun Aug 13 06:04:49 PM CST 2023] url='http://replace.com/.well-known/acme-challenge/rm-enWjHphDeyjXtfXu2mi1V-D6cZY8EHAe_Gi7TmC4'
[Sun Aug 13 06:04:49 PM CST 2023] timeout=1
[Sun Aug 13 06:04:49 PM CST 2023] _CURL='curl --silent --dump-header /root/.acme.sh/http.header  -L  --connect-timeout 1'
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
[Sun Aug 13 06:04:49 PM CST 2023] ret='0'
Code language: HTML, XML (xml)

acme.sh 的报错非常清晰,我的报错是因为我的文件目录中 /.well-known/ 中的验证文件找不到了,所以报错。那我只需要去检查我的 Nginx 配置即可。这里因为我的 Nginx 配置根目录不在默认指明的目录(因为用了 Docker ,nginx 只是一个代理),所以我需要将其修改为真正的 webroot。

修改 ~/.acme.sh/replace.com/replace.com.conf 中的 Le_Webroot 配置为真实的 webroot,再重新签名,就域名成功签名了。

《如何理解老婆的脑回路》书摘

d2b5ca33bd970f64a6301fa75ae2eb22 22

看到书名就点进去看了看,感觉写的很好,一方面是给出了务实的建议,另一方面,则给出了为什么会这样。对于直男们很有参考意义和价值。

前言 了解女性的大脑机制,制定相应的战略

  • “对丈夫非常严厉,对孩子和宠物却十分溺爱”的原因就是母性的本能,男性憧憬的“无尽的温柔”并不是母性。
  • 我建议广大男性,选择结婚对象时,比起天真可爱的女性,成熟大度的女性或许是更好的选择。话虽如此,但任何女性都会或多或少地产生“不讲道理的怒火”,请男性朋友要清楚这一点。

2 最容易形成消极开关的孕期与哺乳期

  • 女性的大脑是能够将过去的相关记忆瞬间回忆起来,并用来解决眼前问题的随机应变的大脑。
  • 认为交流的目的是解决问题的男性大脑
  • 女性的大脑完全能理解这些“无聊对话”的重要性。因此当别人说起自己的体验时,女性会感同身受地随声附和(作为对方送给自己智慧的礼物的回报),然后将对方的“智慧的礼物”变成“关键时刻能够用上的智慧”储存在大脑之中。这就是女性之间闲聊的真相,可以说是非常知性的行为。
  • 女性之间的对话,就是将自己“日常中微不足道的体验”送给对方,然后对方用共鸣作为回礼的共鸣大会。而男性在这方面却不会送出任何礼物
  • 而且对男性的大脑来说,共鸣并不是什么礼物,解决问题才是。因此,男性很少表现出共鸣,而是直接提出解决问题的办法,比如,“只要这样做不就好了吗?”或者“这种事最好不要做”。
  • 比如丈夫到家之后,妻子说:“××(孩子的名字)不肯睡觉还哭,我只能一直抱着,腰都要累断了。”在这个时候,丈夫应该怎么回答呢?
①总抱着都给他惯坏了,下次就算哭也别抱。 ②明天去医院看看你的腰。
这两个回答都不正确。 ①是将“抱孩子”当作问题,并提出了“不抱”这一解决方法。而②则是将腰疼当作问题,提出了“去医院”这一解决方法。但妻子想要的回答是:“今天抱了一天?那腰肯定受不了啊。真是太辛苦了。” 接下来丈夫只需要一边说“嗯嗯、我知道”或者“哎呀,太辛苦了”,随声附和,一边听妻子抱怨就行了。
  • 首先请男性朋友记住一点:妻子发脾气是因为现在受到了伤害。无论她说的是一周前发生的事,还是30年前发生的事,妻子之所以发脾气,是因为她现在感觉自己受到了伤害。 因此,正确的解决办法是诚挚地道歉,除此之外别无他法。

3 用商业分析的方法与妻子交流

  • 地球上绝大多数的生物都将繁衍生息作为第一使命。而通过繁衍后代将遗传基因保留下去的高效的方法,就是“与类型完全不同的对象结合”和“在每次获得繁衍机会时都更换对象”。因为性格的差异越大,遗传基因的多样性就越强,子孙后代生存下去的可能性越高。
  • 免疫抗体的类型决定个体的特点。与不同类型的异性繁衍后代,能够增加子女特点的多样性。简单来说,耐寒的个体与耐热的个体繁衍出的后代同时具备耐寒与耐热的特点。无论地球未来变热还是变冷,后代都能生存下去。因此,小心翼翼与大大咧咧、急性子与慢性子,这些在性格上看起来完全相反的夫妇,从遗传学的角度上来说却是最合适的。
  • 首先,可能很多男性都没有发现,自己会习惯性地采取否定的态度。
  • 这样下去,双方永远也无法达成一致。
  • 这种时候,男性不妨想一想自己最擅长的“商业分析”的方法。
①针对双方的提议分别列举出优点和缺点。 ②实际调查验证。 ③不要试图用优点掩盖缺点,应该告诉对方这样做能够获得什么好处。 ④根据上述内容得出结论。
  • 尽管这种方法有些麻烦,但却十分有效。如果希望自己的提议能够得到妻子的采纳,就一定不要忘记用商业分析的方法与妻子交流。

4 丈夫袒护妻子能够大幅缓和婆媳关系

  • 婆媳之间的紧张关系有时候只需要一句话就可以缓和,但这句话无法从儿媳的口中说出来。如果母亲(婆婆)也不说的话,那就必须由儿子(丈夫)说出来。
  • 女孩在4岁时就已经拥有相当于成年女性的自我意识,如果不加以限制,到了青春期时,这种自我意识会膨胀到难以想象的地步。女孩会认为“自己”比“世界”更加重要,甚至只因为不能自己决定发型便拒绝去学校上学。还有很多青春期的女孩总感觉周围的所有人都在关注自己,无法从这种感觉中摆脱出来,导致自己不敢表露真实的自己,生活在无形的牢笼之中。
  • 当儿子反抗妻子的时候,丈夫必须严肃地提醒儿子:“不许你对我的宝贝妻子这样说话。”对儿子的叛逆视而不见的父亲,并不会得到儿子的尊敬,反而会遭到儿子的轻蔑。更重要的是,向孩子们宣布“妻子是我最重要的人”,能够深深地打动妻子的心。有很多妻子仅仅因为这一句话会一生都非常依赖自己的丈夫。
  • 男性在思考与日常生活截然不同的世界观时,使用的也是同样的能力。分析世界经济局势、思考宇宙发展规律,这些都是男性大脑最擅长的事情。

5 “无名家务”分为两种

  • 这样的安抚不必每天都做。如果每天都这样说,反而让人感觉是虚伪的谎言。就算一个月一次也没关系,只要不忘记就好。
  • 下面是我列举出来的丈夫也能完成的无名家务。
• 买大米(大米很沉,妻子搬运起来比较费劲。而且大米的购买频率较低,不会给丈夫造成太大的压力。像牛奶之类的生鲜食品因为购买频率很高,丈夫可能会忘记,所以最好不要主动提出承担这部分家务,但如果妻子提出请求的话一定不能拒绝)。 • 买猫砂(同上)。 • 保证冰箱的制冰机里一直有水。 • 买咖啡(像咖啡之类的嗜好品很容易库存不足,有丈夫帮忙想着的话妻子能轻松不少)。 • 每周在厕所里喷一遍防霉药。 • 每天早晨给宠物喂食、喂水。 • 每天早晨给阳台上的植物浇水。 • 保持洗手池的镜子干净。 • 烤肉(因为妻子总是需要同时处理许多家务,所以像烤肉这样需要集中注意力的家务由丈夫来负责的话会帮妻子减轻不少压力)。 • 煮面(同上)。 • 泡咖啡(同上)。 • 睡觉前淘米并放进电饭锅里定好时间(这样可以解决第二天早晨的一件大事,对妻子来说非常有帮助)。
能够发现自己家独有的无名家务并承担下来,就是最好的结果!

6 妻子的埋怨是出于对安全问题的担忧

  • 看到这里的男性朋友,再遇到妻子类似的埋怨时,不要反驳也不要怕麻烦,而是要意识到,这是妻子在无意识之中保护家庭的安全、防患于未然,然后尽量遵守妻子制定的规则。家庭基本上是女人的领地,所以不要违抗家中的女性,这才是最安全的选择。

7 绝大多数的问题都发生在客厅

  • 因为妻子在客厅的时间更长,所以应该将主导权交给妻子。而丈夫则应该拥有妻子无权管辖的自己的房间或者专属空间。

8 在购物时利用时间差消除双方的压力

  • 因为重视目标的男性大脑只希望以最快的时间和最短的距离抵达目标地点。
  • 事实上,这种男性的大脑完全无法理解的行为,在脑科学上却是有意义的。女性大脑中感性领域的右脑和显性意识的左脑的联动非常频繁和迅速,属于直觉脑。在购物的时候也会凭借直觉来做出选择。
  • 男性的大脑则通过比较来选择。因此,男性会直接来到家电卖场,但接下来却需要花费很长的时间来做出选择。
  • 对男性的大脑来说,合理是最重要的因素。
  • 丈夫完全不必因为自己的建议没得到采纳而感到气馁。因为女性对于自己不信任的人,根本连问都不会问。

9 丈夫完全意识不到的“让妻子绝望的话”

  • 在妻子没有要求的情况下擅自进行总结并提供解决方案只会给妻子增添压力。

10 开通心理的通信线路

  • 女性的大脑在对话时有4种模式。
①心理肯定——事实肯定 ②心理肯定——事实否定 ③心理否定——事实肯定 ④心理否定——事实否定
女性之间在对话时,基本上不会使用③和④的模式。也就是说,无论对事实是肯定还是否定,追求共鸣的女性大脑首先必须在心理上相互肯定,否则对话就无法成立,人际关系也无法建立。
  • 哪怕一开始只是违心地随声附和“没错没错,就是这样”也没关系,因为只要心理肯定,事实怎样都无所谓。只要牢记这个黄金法则,就能极大地减少踩中“地雷”的次数,并且让对方更容易接受自己的意见。
  • 在第一章的最后,我就来帮大家翻译一下“妻子的违心话”吧。
“一边去!” →我感到很伤心,必须给我好好地道歉,安慰我!
“随便吧。” →如果你敢擅自行动我绝不饶你,必须仔细听我说,按我说的做。
“我自己能行。” →赶快发现我的想法,如果这都没发现的话就说明你不爱我。
“为什么要这样做?” →我根本不想听你解释,你的言行对我造成了伤害。
“没事。” →我可生气了哦,我可哭了哦,你打算不闻不问吗?
“让我一个人静一静。” →在这种状况下如果真的让我一个人的话,绝对不会放过你。
“大家都说我不对。” →这是我不对吗?是怪我吗?明明是怪你啊!
“不愿意做就不做。” →你要是那么不情愿的话就算了。我平时做的家务比这要多好几倍呢。
“别解释了。” →解释我已经听得够多的了,你只要说“我爱你,按你说的做”就行。
“离婚。” →这一点我绝对不会让步,你要给我道歉!

第二章 打开积极开关的方法 让妻子的脸上重新充满笑容的方法

  • 女性的大脑会随着时间的推移不断积累情绪,因此非常喜欢这种期待的时间。
  • 对于女性的大脑来说,如果每个月约会一次,那么女性会在提前得知消息的2周前就开始享受期待的乐趣,并且在约会之后的2周之内仍然能够享受约会的余韵。也就是说,只需要每1~2个月与女性约会一次,并在适当的时机选择一个周末在家里准备一次稍微豪华的晚餐,就能让女性的大脑感到非常愉悦。

2 在普通的日子里能够发挥巨大作用的语言和行动

  • 女性不但喜欢礼物,更喜欢“有意义”的礼物。虽然豆沙面包很普通,但因为丈夫记住了自己随口说的一句话,这就会使妻子感到其中饱含的爱意。如果能够像这样每个月给妻子送1~2次礼物,就能极大程度地提高妻子对自己的好感度。

3 无论多大年纪都爱听甜蜜情话的女性大脑

  • 对于缺乏延伸感的女性大脑来说,因为没有合为一体的感觉,所以需要通过“甜言蜜语”来确保双方之间的联系,但男性却完全无法理解女性的这种心情。
  • “只有和你在一起的时候,我才感觉生命有意义。”“你就是我的唯一。”这样的赞美最能够直接击中女性的心。
  • 在妻子感到幸福的时候对她进行赞美,是必须牢记的铁则。
  • 从战略上来说,赞美并不是能够将消极变为积极的起死回生的杀手锏。但如果在对方感到幸福的时候对其进行赞美,这种锦上添花的效果会比预想中要大得多。
  • 女性大脑喜欢某些特定的话语。尤其是对丈夫一心一意的妻子,总是会反复地问丈夫“你喜欢我吗?”“如果没有我的话会不会感到寂寞?”之类的问题。丈夫只要每次都回答“当然最喜欢你了”“当然会寂寞了”这种固定的答案就好。
  • 只要妻子没有对丈夫感到厌烦,就会一直反复地问“你喜欢我吗?”“你爱我吗?”也就是说,如果妻子总是问同样的问题,说明她非常喜欢你。
  • 直接询问“你爱我吗?”“你喜欢我吗?”“我可爱吗?”的妻子,属于比较单纯的类型,这种类型的妻子还比较好应对。让男性难以招架的,是明明希望得到固定的答案,却用变化球来进行提问的妻子。事实上,绝大多数的妻子提出的问题都是变化球。比如忽然变得态度冷淡,心情不好,不爱说话,然后询问“是不是我对你来说怎样都无所谓?”或者“你对我一点也不感兴趣吧?”甚至还有“我可不是你的妈妈”“你只要有个保姆就行了吧”的升级版。 但实际上,她们想要得到的答案只有一个,那就是“你对我很重要,我非常爱你”。

4 即便这样也不要离婚的理由

  • 女性喜欢心有灵犀的爱,喜欢得到称赞和认可,希望自己被当作独一无二的存在,还喜欢听甜言蜜语。在男性看来这些都是麻烦事。但女性闹别扭、发脾气、爱唠叨,这些都是爱的证明。诸位男性朋友,就算是为了帮助自己规避风险,也希望你们能够经常安抚一下自己的妻子。

向世界告知你的价格

man in white crew neck t-shirt wearing black framed eyeglasses

我最近几年,每年都会更新一下自己的个人说明书,除了会更新一部分我近期关注的方向,很重要的便是更新一下我今年的报价。实际上,我每年的咨询报价都是会有所调整的,会根据当时的市场情况、我自己在对应可接受咨询的领域的理解层次,来确认我今年的报价如何。

z049g7

而坚持这么做,最核心的原因是 —— 向世界告知我的价格

我们华人最大的好处是谦逊,但最大的坏处也是谦逊。我们心中没有“配得感”,我们往往觉得自己“不配”这么干。所以很多时候,我们不会选择向别人说”我可以“,而是更多的说”我不行“。

但是,谦逊会让需要我们的人不知道如何向我们寻求帮助。以及,也会让需要你的人不知道如何和你合作。交易是谈判的艺术,很多时候,大家不是怕你有价格,而是怕你没有价格。因为有价格,无非是和你沟通谈判,谈一个合适的价格。但如果你没有价格,那别人又怎么知道你的预期是多少呢,无从下手,从而无法开始一场交易。

就像常说大家去相亲市场上相亲,有条件要求的其实好找对象,找符合条件的就好了;怕的是哪些说自己没条件要求的,往往是有很多隐含条件。大部分时候,大家怕的是没条件背后的那一堆条件。

当你有了一个属于你的价格之后,后续就是当别人有需要找你的时候,看看你的价格,是否可以接受,如果可以接受,那么继续你们的交易。

d2b5ca33bd970f64a6301fa75ae2eb22 21

如何把一个普通网页以更好的体验分享到微信朋友圈

a computer screen with a remote control on it

一般来说,我的博客文章不会发布到朋友圈,主要是因为懒。不过这周的 博客 2023 年广告招商 我还是发到了朋友圈。

不过,分享的一个问题是如果你在微信中打开博客的链接,并使用自带的分享到朋友圈按钮来分享,会展示文章的链接,这对于其他人来说,十分不方便。

9ce0vo
默认的分享效果

而我希望的效果,则是和分享公众号文章的一样的效果。

tf1npe
分享的效果

如果想要达成这个效果,则需要花费一些小心思。

faukbq

具体步骤

1. 使用 Safari 打开目标网页

首先,你需要在 Safari 中打开目标网页,然后使用 Safari 自带的分享功能,分享给你自己的「文件传输助手」。

twbl5r

2. 在文件传输助手中打开刚分享的链接

当你分享完成后,就可以在文件传输助手中打开你刚刚分享的网页,并点击这个页面的「分享到朋友圈」,这个时候,你会发现,他分享的样式就不再是简单的文字链接了,而是加载了文章标题和文章图片的样式。

3. 设置朋友圈分享的可见性

根据你的需要,设置为所有人可见 or 屏蔽掉一部分人。

9ln103

4. 最终效果

kjpem6

乐观者找方法,悲观者找理由

low-angle photo of pink and orange balloons

乐观和悲观是一个人自小到大所接受的教育、自身基因所带来的。而这种乐观和悲观可以造就非常不同的做事的方法和做人的视角。

同样一个问题,乐观者遇到后思考的是解决问题的办法,如何通过努力使得问题变成一个可以被解决的问题,乐观者总是在不断的尝试一种可能,来完成要做的事情。

而悲观者则更多的关注着一件事的不可能性。如果一件事有一百种方式可以实现,那就有一万种方式不可以实现。

这就是我们常说的,悲观者往往正确,但乐观者往往成功。

写下去,继续的写下去

pen 631321 640

我的博客相比于互联网上的众多博客来说,其实没什么特别的,甚至我的博客其实还不如很多技术的博客,能够专注在某一个技术领域上。

我的博客则显得随性许多,当我最近在研究某个技术的时候,我就会开始快速的、集中式的撰写我在相关领域踩过的坑、我自己的心得总结(比如之前有段时间频繁的写 VSCode,主要其实是因为当时我在研究 VSCode 插件)。当我最近在生活中有了新的东西,我也会集中的写一些内容(比如之前买了车,连续更新了不少关于车的内容)。

但实话说,我的博客可能比很多人的博客的流量要好很多了,每天基本上可以保证 100UV(相关数据可以看 博客 2023 年广告招商 中的数据)。

到底是因为什么呢?何其荣幸能让大家来看我的博客呢?

如果有原因,我想可能便是坚持。

虽然我的博客文章可能比较零散,风格也没有那么集中,但长时间的写作,让我的博客累计了不少的读者,大家或是在网站中直接查看我的博客,或是通过 RSS 阅读我的文章,已经习惯了我的文章更新。

时间,让我成为了大家那个能一直更新的朋友,你知道,来到这里,总是可以看到我写的文章,我最近的变化。

对于我来说,写作不为别人读,更多的是为了让我自己可以更好的梳理我内心的所思所想。甚至我现在还有写日记的习惯,便是为了能够让自己每天记录下自己纷乱的思绪。我能做的,便是一直写下去,不停的写下去,直到我写不动了,不愿意再写了,不能再写了。便停下自己的脚步。

vbad11
我的 Day One 持续写作时间已经突破了 1000 天。

我为什么不喜欢笑?

Portrait of nonbinary autistic person wearing a rainbow sweater

周末去拾光秀照相馆拍了照片,中间被摄影师引导微笑,摄影师描述我的笑就像是“职业假笑”。

回想一下,近几年我的确很少再笑了,嘴角反而是习惯性的下撇,看起来人有点凶,笑起来幅度也没有那么大,就会显得很像假笑。

甚至于在某些我不笑的形象照中,如果的确需要笑的照片,我会选择用一些 AI 的工具,来把不笑的我变成在笑的我。

今天照着镜子看了看,可能主要是因为胖…因为胖了一笑脸上肉就会堆起来….还是要减肥….

ChatGPT 到底会替代谁?

yellow and black robot toy

随着 ChatGPT 的出现,我们发现,很多工作似乎不再需要人来做了。写博客?ChatGPT 可以写的 比你更好,写的更快,写的更多。写代码?ChatGPT也能干,甚至比你可能写的要标准。

不少人因此恐慌,觉得自己的工作已经失去了意义和价值 ,自己即将被 ChatGPT 所替代。

对于从事重复性劳动的人而言,平心而论,确实将要被替代。我们不再需要人来做重复性的劳动,机器人可以全年无休,永无止境的工作下去,且随着技术的不断演进,机器的成本将会不断的降低。如果你的工作只是低水平的重复,那么你终将被替代,无非是现在,或者是未来。

能让我们持续的工作下去的,是我们对于事情美好的认知,这些认知源自我们从社会上习得的上下文,为了保证美好,企业愿意为此付出成本,来养活我们。想要持续的有价值,培养自己的审美,是必不可少的。

要允许一些人花钱

economic 经济

很早之前,我就看过雷 · 达里奥的视频《经济机器是怎样运行的》。在我看来,任何现代人都值得看看这个视频,即使你对于经济完全不了解,也没有兴趣了解,你知道应该知道我们这个社会的经济是如何开始运转的,从而以此来引导你的生活。

经济机器是怎样运行的我之前就推荐过一次。

在这个视频中,其实有说明,我们的经济中的钱其实是一部分人花钱,另一部分赚钱。而疫情之后,对我来说则更加证实了其对于经济的理解。

疫情之后,我们经常发现大家对于经济没有信心,从而消费水平下降,消费降级,更多存钱。这是好事,我们都更加关注给自己留出安全边界。这也不是好事,因为我们中一部分人花掉的钱,则是另一部分人挣来的钱。如果一部分不花钱,则另外一部分没办法挣钱。毕竟,钱只有流转起来,才有其价值,不然不过是废纸一张。

这也是为什么我们看到了大量的国家政策希望提振经济(虽然我觉得发文也没啥用),因为只有我们当中的一部分人敢于花钱,才有可能让另外一部分人赚钱。才能盘活整个经济机器。

当然,国家的预期和我们个人的预期未必一致,我们可以反过来想想,既然我们花掉的钱是别人挣的钱,那么我们的消费当中,哪一部分是应该花、值得花,那一部分是我们无意中消费掉的,除了给国家贡献 GDP,没有别的价值?

你支持 LGBTIQA+ 么?

group of people under garment

朋友问我:“你支持LGBTIQA+么?”

我的答案是,我不会反对。


对我来说,我始终能够感受到“有毒的男子气概”,也支持平权。但具体到某一个名词、一件事上,决策又不是那么的简单。

比如,LGBTIQA+ 对我来说,并没有什么特别的(就像美国某一个 KFC 换了一个接线员一样,对我来说可能毫无变化,当然,从蝴蝶效应的视角来看,依然有影响,但我有限的认知里,可能对我来说毫无影响),所以我既可以支持,也可以中立。

但如果落实到身边的朋友,我会选择支持。理由也很简单,既然对我来说,支持和中立一样,那我为什么不选择让朋友更开心的“支持”呢?

给 mdbook 增加备案号显示

rustlang

由于 Gitbook 长期不维护,为了保障整个架构持续可用,所以导致我不得不从 Gitbook 迁移到 mdbook。

在使用 mdbook 的时候,有个问题是,我的不少电子书域名都是备案过后的,mdbook 又不像 gitbook 支持可以在目录里跳转外链,因此我需要自己实现给 mdbook 添加一个外链。

实现思路

由于没办法直接通过在 Markdown 当中实现跳转外链,那么一个比较简单粗暴的方法就是直接在模板当中添加,刚好 mdbook 在文档中有说明具体的操作方法

你只需要在 mdbook 的根目录中创建一个 theme 文件夹,并生成一个 index.hbs 文件,用于渲染页面。

接下来,你只需要在适当的位置添加上你需要的代码即可(下方的 toc 后面的 有序列表便是我手动添加的)

   <nav id="sidebar" class="sidebar" aria-label="Table of contents">
            <div class="sidebar-scrollbox">
                {{#toc}}{{/toc}}

                 <ol class="chapter">
                    <li class="chapter-item expanded "><a href="https://beian.miit.gov.cn/" target="_blank">这里是你的备案号</a></li>
                </ol>

            </div>
            <div id="sidebar-resize-handle" class="sidebar-resize-handle"></div>

        </nav>
Code language: HTML, XML (xml)

参考文档

https://github.com/rust-lang/mdBook/issues/1354

被滥用的云南十八怪

d2b5ca33bd970f64a6301fa75ae2eb22 34

这次去云南,看到了各种各样奇奇怪怪的“云南十八怪”,让我不得不来吐槽一把。

在没去云南之前,我就知道云南有个“云南十八怪”,在解释云南各种和中原地区差异比较大的生活习惯,但说实话,一直没怎么了解过具体的细节,因为不熟悉。

根据百度百科,云南十八怪是这样的:

你说奇怪不奇怪,云南就有十八怪。
四个竹鼠一麻袋,蚕豆花生数着卖;
袖珍小马多能耐,背着娃娃再恋爱;
四季衣服同穿戴,常年能出好瓜菜;
摘下草帽当锅盖,三个蚊子一盘菜;
石头长在云天外,这边下雨那边晒;
鸡蛋用草串着卖,火车没有汽车快;
小和尚可谈恋爱,有话不说歌舞代;
蚂蚱当作下酒菜,竹筒当作水烟袋;
鲜花四季开不败,脚趾常年露在外。

百度百科

但我在云南当地,见到了各种奇奇怪怪的十八怪,甚至炒酸奶也被编进了十八怪:“酸奶炒着卖”

d2b5ca33bd970f64a6301fa75ae2eb22 33
d2b5ca33bd970f64a6301fa75ae2eb22 34
d2b5ca33bd970f64a6301fa75ae2eb22 35

如何解决 Kindle 在 M1 系列设备上无法访问的问题

flat screen monitor

问题

在使用 M1 的时候,我遇到一个很麻烦的问题是 M1 无法识别出我的 Kindle系统无法自动加载 M1 设备,这导致习惯于导入标注并使用 Klib 管理的我来说,等于用 Kindle 的功能不齐全了。

使用 macOS 自带的系统工具,也可以看到系统 Kindle 的磁盘,但无法加载。

d2b5ca33bd970f64a6301fa75ae2eb22 29
磁盘工具的展示

如果使用磁盘工具尝试加载,也会报错 com.apple.DiskManagement.disenter错误-119930872

d2b5ca33bd970f64a6301fa75ae2eb22 30
报错的提示

无法使用系统工具加载。

解决方案

在参考了 jakevin 的分享后,我使用如下方式来解决我的 Kindle 挂载问题。

查询外置设备

执行如下命令,可以使用系统自带的 diskutil 查看目前有哪些磁盘。我在这里补充了 grep,来筛选出只有外置磁盘的设备。

diskutil list | grep external -A2
Code language: PHP (php)
d2b5ca33bd970f64a6301fa75ae2eb22 31

手动挂载设备

执行如下命令,来手动挂载 Kindle。

sudo mkdir /Volumes/Kindle # 创建一个新的挂载点,挂载 Kindle
sudo mount -t msdos /dev/disk4 /Volumes/Kindle/ # 使用 mount 命令,挂载 /dev/disk4(你根据需要换成你自己的设备。)
Code language: PHP (php)

一般来说, Kindle 的默认格式化是 fat32 格式,所以用上面的命令就行,但如果你的 Kindle 是 ex-fat 格式,则可以使用如下命令挂载。

sudo /sbin/mount_exfat /dev/disk4 /Volumes/Kindle/ #这里使用的是 mount_exfat。
Code language: PHP (php)

如此操作,便可以让 M1 识别 Kindle 了。

d2b5ca33bd970f64a6301fa75ae2eb22 32

为 Next.js 加上 Git Commit 版本号

text

在开发服务端应用的时候,由于服务端应用本身的特性,其实是没有一个明确的版本的概念。毕竟不需要专门下载,理论上每次都是最新的,所以也没有版本的概念。

但在实际开发调试过程中,我们又的确需要关注版本的概念,因为会影响具体的表现形态,所以就需要有一个前后端协调的版本号概念,来帮助我们更好的定位问题,避免前后端之间的扯皮。

一个比较好的思路是,虽然服务端没有版本号概念,但大部分时候会有一个对应的 Commit ID(毕竟现在开发项目完全不用版本控制工具的还是挺少见的)。所以,你可以选择将 Commit ID 作为版本号,进行输出,从而让协作者知道当前线上跑的版本,便于 debug。

在具体实现时,有两种方式:

1. 将 Commit ID 放在 Header 里

我自己平时会把 Vercel 和 Next.js 提供的 API Route 作为一个简单的 Serverless FaaS 环境来使用,因此一个诉求便是在 API Route 当中返回具体的 Commit ID。而为了避免对代码的侵入,将其放在 Response Header 当中是比较合适的。

d2b5ca33bd970f64a6301fa75ae2eb22 2
添加完成的效果。

而如果你希望和我一样,达成对特定路由下的返回结果添加特定的 Header(比如上面截图中 x-build-sha 就是我添加的 Commit ID 的 Header),则需要借助于 Next.js 提供的自定义 Header 能力

通过在 next.config.js 当中的 header 属性中添加具体的配置,来实现对特定的路径下添加自定义 Header。

module.exports = {
  async headers() {
    return [
      {
        source: '/about',
        headers: [
          {
            key: 'x-custom-header',
            value: 'my custom header value',
          },
          {
            key: 'x-another-custom-header',
            value: 'my other custom header value',
          },
        ],
      },
    ];
  },
};
Code language: JavaScript (javascript)

这里面比较关键的是 source 字段,这个字段定义了究竟哪些路由下会返回特定的 Header。比如上面的这段配置就是只给 /about 添加具体的 Header。你可以使用 /:path* 来匹配所有路由,从而实现给所有路由都添加上具体的 Header。

以我为例,我在线上跑的配置实际上是下面这段配置:

/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true,
  async headers() {
    return [
      {
        source: '/:path*',
        headers: [{ key: 'X-Build-SHA', value: process.env.VERCEL_GIT_COMMIT_SHA }]
      }
    ];
  }
}

module.exports = nextConfig
Code language: JavaScript (javascript)

在上面这段配置中,我给所有的路径都配置了一个 x-build-sha 的 header ,并从进程的变量中提取出 VERCEL_GIT_COMMIT_SHA 变量(这个变量在 Vercel 的部署环境中指向具体的 Commit ID)的值,将其返回。

2. 将 Commit ID 放在 UI 里

除了在 Header 中返回,如果你是需要去 Debug UI 的话,版本号同样重要,这个时候,你可以选择将 Commit ID 放在界面上,从而实现快速找到 Commit ID。

在 Vercel 部署的 Next.js 上,有一批 Next.js 框架所属的环境变量, 可以直接在 UI 当中引用(上面的 VERCEL_GIT_COMMIT_SHA 是不能在 UI 中直接引用的)。

只需要在特定的位置,加入SHA: {process.env.NEXT_PUBLIC_VERCEL_GIT_COMMIT_SHA} ,就可以展示具体的 Commit ID。

(除了 Next.js,其他框架也有类似的框架变量可以使用,你可以根据自己的需求来选择)。

总结

在服务端 Debug 时,将你的 Commit ID 以某种方式返回可以有效的帮助快速定位问题,试着给你的 Next.js 添加上这个 Commit ID,来加速你的问题排查吧~

疑问,是更好的提问方式

question mark neon signage

我是一个比较反感“反问”的人。

总的来说,是因为我对于反问的感观不太好,特别是反问背后所表现出的挑战(这可能源自我是一个不那么自信的人)。反问带给我的感受更多的是“不认可”、“不信任”,从而激起我的反抗。反问,拥有一定的攻击性。

而疑问,则是一个更好的选择,特别是在人多、鱼龙混杂的时候,能够更好的隐藏自己的意图,将自己保护起来。反问则会更加暴露出你的倾向,并不适合自我保护,过于锋芒毕露。

提醒自己,不要做一个总是”反问“的人。