标签归档:随笔

a person sitting at a desk using a laptop computer

我的 Hackathon 心法

我是一个很喜欢 Hackathon 的人,除了会积极参与一些其他团队组织的 Hackathon,有些时候也会自己给自己模拟一个 Hackathon 来玩。

如果仔细问问我为什么这么喜欢 Hackathon,大概是你必须在一个有限时间内去完成一个你自己设定的目标。这个目标具有一定的挑战性,同时又逼迫你思考到底什么是重要的。我的几个出名的项目 —— Logoly、NESHouse、ChatGPT-Feishu 都是在 Hackathon 的阶段完成的。

对于我来说,一个 Hackathon 我一定会做的:

  1. 选择一个我不那么熟悉的技术栈:太熟悉的内容没必要在 Hackathon 的过程中去实现,放在真正的生产环节去迭代就好。
  2. 选择一个我不熟悉的目标:如果技术栈选择了一个熟悉的方向,则在目标上会选择一个全新的方向,这样有可能在 Hackathon 环节去做一个自己从未做过的事情,扩展自己的能力圈。
  3. 逼迫自己思考什么是重要的:Hackathon 因为时间和资源是有限的,因此一定要逼着自己反复的思考到底什么是最重要的?以及我如何在有限的时间内,达成这个最重要的内容的产出的目的。

通过这样的方式,我几乎每一次的 Hackathon 都会有全新的收获,无论是新的技能,还是新的产品,一定会有相关的产出,而这些就是我参加 Hackathon 的最核心的收获。

此外获得到的东西,都不过是 Bonus,有了最好,没有也完全可以接受。

red and silver beaded necklace

如何在 M1 mac 上安装 MySQL2 Gem

在 M1 的 mac 上安装 mysql2 这个 gem 的时候,经常会遇到如下的报错:

1 warning generated.
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: warning: -multiply_defined is obsolete
ld: warning: ignoring duplicate libraries: '-lruby.3.2'
<strong>ld: library 'zstd' not found
</strong>clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1
Code language: PHP (php)

根据提示,我们可以看到是 zstd 这个依赖找不到导致的编译失败。这是因为 mysql2 是一个 Native Gem,依赖了大量的系统组件,如果我们没有对应的系统组件,就无法找到。

但实际上在我的系统中已经安装了 zstd,只是在 mysql2 的构建过程中找不到。

d2b5ca33bd970f64a6301fa75ae2eb22 3

要解决这个问题有几个思路:

  1. 在构建时能找到 zstd ;
  2. 在构建时指定 zstd 的位置。

这里我选择第二种方式:

gem install mysql2 -- --with-mysql-config=$(brew --prefix mysql)/bin/mysql_config --with-ldflags="-L$(brew --prefix zstd)/lib -L$(brew --prefix openssl)/lib" --with-cppflags=-I$(brew --prefix openssl)/include
Code language: JavaScript (javascript)

通过 -- -with-mysql-config 的方式,可以在安装时指定构建的参数,从而实现让 gem 构建时使用我们设置的路径,从而完成 gem 的安装。

d2b5ca33bd970f64a6301fa75ae2eb22 4
wrapped gift box

一些适合送给小朋友的礼品

我的两个表姐都生了小朋友,大表姐生了一个女儿,二表姐生了一个女儿和一个儿子。作为舅舅,我希望每年都送他们一些礼品,一方面让他们记得我,另一方面,也算是帮助身在焦作的他们看到一些一线孩子看的书。(当然,这些书未来当我有了孩子,也会同样买给他,让他看)。

记录下来,是为了方便你在遇到类似的问题时,有的参考。

已经送过的礼品

图书

  • 新概念英语》:虽然目前教育提倡学中文,不断在降低英文的比重,但我自己作为一个英文的受益者,还是希望下一代能够学习英文、学好英文,去看看这广袤的世界。
  • DK博物大百科》:DK 大百科声名在外,希望博物大百科可以帮助他们理解这个世界的多样性。坦白来讲,我觉得 DK 系列都很值得作为礼物送给小朋友。
  • 小亮老师的博物课》:当时小亮老师比较火,加上博物课本身是我比较希望小朋友了解的,就直接买了一套。现在回过头想想,可能和 DK 博物大百科冲突了。
  • 图说天下·国家地理系列:走遍中国》:焦作是一个小地方,如果他们未来上大学也在省内上,可能终生走出河南的机会不多。但走遍中国系列的图书,可以让他们知道原来中国这么大, 他们知道世界之大,便有走遍世界的可能。
  • 大英儿童漫画百科全书》:这是我买的最早的礼物,当时没有买 DK大百科主要是怕他们看不懂。
  • DK 文明百科全书》:专注在历史领域的图书。DK 大百科是真的很适合当礼物送。。

玩具

  • 乐高

希望送的礼品

  • 性教育相关图书:我国的学校里目前性教育依然是禁忌,则通过家庭的方式来补充是必要的。我也希望选择一些性教育的图书,送给他们,帮助他们建立正确的性观念,保护好自己。
  • 财商相关图书:我从小就没有接受良好的财商教育,很多信息都是成年以后自己慢慢学习的,希望他们能够不走我的老路,在更早的时候,就能够接受到相关的信息。目前打算购买的图书包括:《小狗钱钱》、《富爸爸穷爸爸》。胭脂王推荐了《奇妙的盘算社团》,但我还需要自己先看一遍,再评估是否要送给外甥女和外甥。

2024.01.15补充

《奇妙的盘算社团》读完了,还不错。不过比较适合初中阶段的小朋友。他们已经建立了基础的人生观、价值观,这个时候看这本书比较好。

2025.01.10 补充

堂姐家的孩子出生了:

  • 生肖金手环(大概 1g )左右,第一次见面送的。
  • 金饭碗、金筷子、金勺子(大概 1g )左右,满月送的。
red and white square illustration

You Need or You Want?

由于常年有信息焦虑症,所以我订阅了大量的信息来源,各种 RSS、公众号。但真正我能看到的是有限的。

这个时候就有一个问题需要回答:

我关注的这些内容,到底是我需要?还是我想要

理想情况下应该是我只看我需要的,并在我需要的基础之上,有 10% 左右的超额内容,这样确保自己既没有被海量的消息打爆,同时也没有陷入在信息茧房里。

不消费无用信息便是一个尝试

100 多个频道,得干掉一些。

d2b5ca33bd970f64a6301fa75ae2eb22 1
red and white square illustration

不消费无用的信息

今天注意到,我自己在消费 Youtube 上关于 Tesla Model 3 的视频信息。

但实际上,我不应该消费这个信息,因为我已经在今年买了自己的第一辆车,今年内大概率是不会需需要买车了。在买车应该是在 2-3 年后,有了自己的房子才会考虑买电动车。

此刻我对于 Tesla Model 3 的任何信息消费都是无意义的、超出我需要的,除了会增长我自己想要购买 Model 3 的欲望之外,不会有任何的变化。

但现实是我不可能在短时间再买车。

so, 答案就是,我不应该消费这些信息,直到我的又一次需要去购车时,再重新关注和了解这些信息。

嗯,应该取关一些公众号、Up 主,控制自己的信息摄入了。

red and silver beaded necklace

如何自定义 Docked?

我在之前的文章 使用 Docked Rails CLI 简化 Rails 的开发 中介绍了 Ruby on Rails 的 Docked 程序,并提供了一个我自己的定制版本。

这里来和大家说一下怎么自定义 Docked 镜像,从而构建一个适合你自己的镜像。

Fork Docked 项目

At first ,你需要 Fork Rails 官方的项目

https://github.com/rails/docked

Fork 项目到你自己的名下后,你可以修改一下他的名字,改成适合你自己习惯的名字(比如我就改成 Runs 了,Docked 对我来说太容易打成 Docker 了)。

修改 Dockerfile

Docked 最核心的其实就是 Dockerfile ,你可以修改你 Fork 来的项目,并在 Dockerfile 当中添加必要的依赖,引入新的资料等。

比如,https://github.com/bestony/runs/commit/d930a5d6fc389cb6fa8e9f7c41947d01b000da95这个 Commit 就是为了在 Dockerfile 当中添加 PGSQL 的配置,以实现在使用 rails new 命令时,可以选用 PGSQL as DB Backend。

修改 Ruby 版本

可参考:https://github.com/bestony/runs/commit/31fabe5f914d931834b0e12797b14d76bf56d162

修改 Node 版本

可参考:https://github.com/bestony/runs/commit/5969cc4ee5c0bf8503ebdab5664f365b6719843e

修改编译脚本,上传镜像

修改完成 Dockerfile 后,接下来你需要修改 Docker镜像产物,以便于你自己在实际使用过程中,直接使用你自己的 Docker 镜像。

修改 https://github.com/bestony/runs/blob/160fe165db7abecc3229be417b15473dcd3aec9f/.github/workflows/docker-publish.yml#L41 的 tags 为你自己的,格式为 ghcr.io/{你的 ID}/{你的仓库名}

修改好之后,只需要提交 Commit ,等待 Github Action 的自动构建即可。

修改 Readme

镜像构建结束,你只需要修改 Readme 中的安装配置命令,这样在后续使用时就不用自己再修改了。重点修改的内容包括 ailas、镜像名以及底部的启动命令。

d2b5ca33bd970f64a6301fa75ae2eb22

总结

通过对 Docked 的简单修改,可以实现快速构建一个属于你自己的开发环境命令,帮你优化自己的工作流。

gmail

Gmail 的一个搜索小技巧

很久没有看 Gmail 了,堆积了一千多条消息。于是今天上午抽了半个小时,清理了一下邮箱。

RaiseByTurtles 中找到如何筛选出所有没有标签的邮件,我使用的是下面这个 Query

-has:userlabels -in:sent -in:chat -in:draft -in:inbox
Code language: CSS (css)

通过这个 Query ,我就知道我其实还可以使用 - 的语法来在 Gmail 中搜索邮件(过去我几乎只用 is:unread [query] 来搜索所有包含某个关键词的我未读的邮件)。

在清理过程中,我就可以不断的在其中去叠加一些关键词,来实现,干掉那些已经失效的邮件,比如,通过下方的 Query 就可以实现屏蔽掉所有没有标签且不属于 Substack 和 zhubai 的邮件,从而避免误伤到我订阅的 Newsletter。

-has:userlabels -in:sent -in:chat -in:draft -in:inbox -substack -zhubai
Code language: CSS (css)
woman taking photo of high-rise building beside road

什么样的照片有长期的留存价值?

这两天在梳理我的老照片,一边看一边删,也整理出了我眼中,有长期留存价值的照片。希望通过总结出规则,方便自己日常拍照、日常清理照片。

原则

  1. 有清晰人像的照片:我们的记忆是跟随人一起的,我们会记得某些人的某些时刻。因此值得长期留存的照片,一定是有清晰人像的照片。无论是正面出镜,还是背影出镜,能辨别出清晰人像的照片,才是有留存价值的。单纯的风景照片从长周期的记忆视角来看,不值一提。
  2. 有故事感的照片:虽然有清晰人像,但故事中有一定的冲突、故事感的照片,才值得我们留存。自拍符合清晰人像,但未必符合故事感。如果只是自己的脸,其实留存下来没有太大的意义(只能用来感慨自己的人生变化还是蛮大的,已经没有了当年的朝气)。

定期清理照片

除了定下规则,也需要定期清理照片,这样才能在需要的时候,快速找到自己的照片。照片多并不一定是好事,有价值的照片多才是好事。

手机相机还是得好

翻自己的老照片,明显感觉到,手机拍照记录生活还是更主流。相机虽然也有,但更多是「作品」,而不是「生活」,生活还是得手机。

selective focus silhouette photography of man playing red-lighted DJ terminal

我喜欢的歌手

最近突然想起来,应该把我喜欢的歌手 Share 给大家,互相交换一下自己喜欢的歌手、歌曲,让那些好听的歌曲广为流传。

周杰伦

不用多解释,我们那个年龄段的人都喜欢。

赵英俊

赵英俊的歌我一致都很喜欢,他的歌曲风格独特又深入人心。

我喜欢的歌包括:

  • 《送你一朵小红花》
  • 《世界上不存在的歌》
  • 《悟空传》
  • 《万万》
  • 《不许离开我》
  • 《唐人街》
  • ...几乎他的所有歌我都很喜欢

他的歌很多时候唱出了小人物的无奈,像我这样的小人物,难免会有一些「他唱出了我的感觉」,所以很习惯。

再加上他的编曲也都不错,人也很有才,所以很喜欢听他的歌。

可惜天妒英才,英年早逝。

汪苏泷

汪苏泷的情歌很多,也很值得听。

海来阿木

海来阿木坦白来讲,之前我不是特别的熟悉,因为的确小众。不过听了以后,他的声音还挺有个性的,自带嘶哑的特效,唱起来情歌,自带的撕裂感。

我喜欢的歌包括:

  • 《不过人间》
  • 《你的万水千山》
  • 《别知己》
  • 《三生三幸》
  • 《阿果吉曲》
  • 《西楼儿女》

海来阿木算是宝藏歌手了,比较小众,但歌的确很好听。独特的声线值得一听。

李宗盛

我目前已经到了能听懂李宗盛的年纪了。所以,也推荐给大家。

此外,李宗盛之前和 New Balance 拍的一系列广告片也不错,感兴趣的可以找来看看。

ea3765a81c7a26a7864efdcf7c81ef7b

为什么说投资是认知的变现?

过去一直听孟岩讲「投资是认知的变现」,没什么感觉,最近投资拼多多属实让我自己感受到了「投资是认知的变现」这句话。

投资的核心动作是低买高卖

在股票市场中,所有的盈利来源都可以归结为「低买高卖」,你在低价时购买了股票、基金,并在高价时卖出基金,获得其中的差价。

一种策略是简单的「追涨杀跌」,如果发现一个股票/基金开始出现涨势,就开始买入,并在买入后不久,进行售出。这种行为并非完全不可行,在高频交易和量化交易的过程中,基本上便是基于这样的逻辑进行,并通过机器逻辑来提升交易的频度和粒度,获取高额收益。

另一种策略便是我们所说的「投资」,找到你觉得价值和价格不匹配的股票,以低于市价的标准买入,并以高于市价的标准卖出,获得其中的价差。绝大多数的投资便是如此。

如今有了各种股票基金 App,投资动作变得越来越简单,你不再需要前往股票交易所现场购买,远程在家中,甚至坐在马桶上,都可以完成一次交易,「认知」体现在何处?

认知便是你知道这支股票的价值是多少。当你知道一个股票的价值,你便敢于在市场情绪崩溃的时刻激情买入;当你知道一个股票的价值,你便敢于在市场热捧之时,激情抛售。

我的收益不过是运气

我买入拼多多时,正值中美关系冰冻,拼多多股票跌至 70 美元。所以我买入了 20 股,把当时海外的空闲现金全部投入。后续随着中美关系解冻、拼多多的海外版 Temu 业绩不错,拼多多股票一直涨,直到最近的 145 美元。

从 70 买入开始,一直到 110 美元开始,我开始纪律性的卖出,110 美元卖一部分;120 美元卖出一部分;130 美元卖出一部分;目前手头还剩不多,定下的售出价格是 150 美元。虽然尚未达到 150 美元,但已经收回本,剩下的部分其实都是赚的。

在此刻,我深刻的感知到「投资是认知的变现」。我不知道拼多多的价值是多少,所以我会在 110 卖出、120 卖出、130 卖出。如果我始终没卖,可能到了 150 美元卖出,不仅仅是收回本,而是翻倍的收益。

但另一个层面,上面的这些不过是马后炮,拼多多完全有可能从 110 美元跌回 70 美元,甚至跌回 40 美元,这一切都是有可能的。我的认知并不能告诉我拼多多的价值到底是多少,只不过是纪律性的交易让我可以赚钱,本质上是幸运,而不是能力。

一如当下纠结的我,到底该不该卖拼多多?现在是否是已经超过了拼多多的股票价值?我是否应该继续持有还是卖出?我不知道。或许止盈是一个好的选择,既然认知不到位,就应该接受自己认知不到位带来的结果。也像我年初 200+ 卖掉的 NVDA,我的认知没办法想象到 NVDA 可以卖到 400+ ,所以自然无法享受到其从 200+ 涨到 400 + 的收益。

投资不过是认知的变现。