作者归档:白宦成

关于白宦成

独立开发者, 自由职业者, 写作者

9e6a931fa940bc97a9753cbfa3f2a954

树莓派镜像烧录后无法使用 SSH 的问题 Debug

最近开始玩树莓派,使用官方的树莓派镜像烧录器烧录了一个镜像到系统中。

但烧录成功后发现却无法通过 SSH 登录。但我记得自己明明是在配置时设置了「开启 SSH 服务」。

d2b5ca33bd970f64a6301fa75ae2eb22 1

经过网上搜索发现,原来这个配置并没有什么卵用。你配置完成后,需要在 TF 卡的根目录创建一个 ssh 文件夹,来开启 SSH 功能。

d2b5ca33bd970f64a6301fa75ae2eb22 4
people standing on shore during golden hour

“宗族化”与“城市化”

和堂弟相对长期的生活了一段时间后,我对于城市里的孩子和村里出来的孩子又有了新的认识 — 边界感不同。

在我看来,这种边界感的不同,是来自于各自生长的环境:

  • 城市化:城市里的孩子们往往是散居、各自独立的生活状态。家庭成员只有自己、爸爸和妈妈。周围虽然也有邻居,但往往只会在外面玩,游玩结束后,各回各家,各找各妈。
  • 宗族化:村里的孩子们由于历史的原因,经常会出现一个村子里很多户之间都有一定的宗亲关系。各家孩子可能会一起到一个孩子家里玩,甚至是吃住在这个孩子家中。

这种城市化和宗族化的差异,致使城里的孩子会更加的明确「你」和「我」的边界,「我」会维护好自己的边界,尽量不进入到「你」的边界中。这种边界感,在城市这种陌生人社会当中,如鱼得水。

而村里的孩子在村里的时候,并不会有特别强的这种边界感,初次到城市当中生活时,会更容易碰壁,并因此碰壁之后缩小到一个更小的边界范围。在这个边界范围里,继续自己没有边界感的状态。

城市化不一定是好事,因为其中隐含了「我不完全信任你」的含义;宗族化也不一定是好事,因为在默认社会下,不加选择的信任,会导致我们受到欺骗。

在我看来,一个孩子需要接受城市化的教育,也需要接受宗族化的生活,这样才能在保护好自己的前提下,尽可能多的向外释放善意,开放自己。

red and white temple under blue sky during daytime

为什么国内的大公司普遍在北京设立分部

最近在研究美国的互联网公司的时候,发现一个很有意思的事情,美国的互联网公司并不会像国内的互联网公司这样,扎堆在首府开设分部。举个例子来说,你会发现,白宫所在地并没有什么大型的企业。

如果进一步研究的话,你会发现,欧洲的很多互联网企业/软件公司也是分布在全国各个地方的。

这是一个很有意思的区别:为什么中国的互联网公司,甚至是各行各业的公司都要在北京设立分部?

我自己猜测的一个原因是中国的这种体制决定的。

中国是社会主义国家,在政治和管理方面,政府会有较强的管控的欲望和权力。这导致一个行业的兴衰可能不仅仅是看市场,还要看政府的政策(教培行业就是个例子)。在这种情况下,对于风险更加敏感的大公司自然会在北京安排相应分部,以便于 GR 团队(Government Relationship)和政府相关部门沟通,以便了解政府相关安排和动态,提前规避可能的风险。

而海外虽然政府也有影响,但远达不到中国这种程度,所以企业可以分部的更加的均匀,不需要在首府呆着。

这种模式下带来的,是中国的一线城市和三四线城市的两极分化极为严重。一线城市繁荣无比,三四线城市则萧条无比。

想了想,感觉无解。

woman in black jacket sitting on chair

有耐心,但做事要快

今年的年景不好,堂弟虽然学习了半年的前端,掌握了一些基本的前端开发能力,但依然找不到一个工作。这非常的合理,毕竟他之前没怎么学过研发,如果自学很快就能找到工作,让那些科班的同学们如何自处。

但作为求职的人来说,也必须明白,在当下这个环境下,要做到有耐心,但做事要快

有耐心,是指要明确在当前的这个大的背景下,求职并不容易,甚至可以说是非常难。环境不好的情况下,刚毕业的学生是最不容易找到工作的。毕竟作为企业,都希望招募到熟手来加快企业的节奏。在这样的大的背景下,找工作必定是一个漫长的事情。

做事要快,是指虽然在这个大的环境下,求职不容易,但我们需要明确我们做事的方法和手段,尽可能快的获取到反馈,帮助自己更快的识别问题、纠正问题,从而更早的抵达目的地。

这两者并不冲突,同时,也很难。

toddler looking at believe in yourself graffiti

做让事发生的人

在工作和生活中,我们可以选择成为「让事发生」的人,而不是「等事发生」的人。

举个例子来说,假设你需要建造一个猫窝,在资源充足的情况下,你可能马上就可以自己造一个猫窝(或者是买一个猫窝)。但现实情况下可能并不允许你马上就能造一个猫窝。

这个时候,你有两种选择:

  1. 让事发生:你可以选择先查询一下建造一个猫窝需要什么样的物料,并从现在开始,当手头的资源充足的时候,就先去购买对应的物料。直到你凑齐物料之后,再建造一个完整的猫窝。
  2. 等事发生:你可以选择先什么都不做,等待时机成熟之时,自然便有了资源来购买猫窝。

这两种选择最大的区别是「让事发生」的人投入了自己的精力和时间让事情有了发生的可能。而后者则是等待时机的成熟,被动地等待事情发生。但事情往往不能遂人愿,时机可能永远都等不到。

为了让你希望的事情发生,试着变成一个「让事发生」的人吧。

selective focus photography of an arrow

目标指引你成功

每一个人都需要一个目标,来帮助你抵达彼岸。不过可惜的是,我们的教育很少教育大家关于目标、关于理想、关于人生价值的内容。这可能是我们的教育的问题。

不过,如果你看到这篇文章,说明你至少不是一个那么普通的人 —— 这年头看独立博客的人已经不多了。

目标存在的意义并不是和很多人想象中那样的无用。每当我和别人提起,“你是否有理想?”、“你找到你的人生母题是什么了么”,大家常常会说:“我的理想就是不用上班”。

但这只是一阶回答,不上班只是表象。那么你不上班之后要做的事情,才是你的理想 —— 它可能是宅在家里打游戏(只要你能一直打下去)、也可能是周游列国,也可能是做你想做的事情。

它是什么并不重要,重要的是,你必须想清楚你的目标(至少是想清楚当下的目标),有了这个目标,你便可以在做出选择的时候,基于你的目标进行纠偏,从多个选择中,找到那个离你的目标更近的选项。

d2b5ca33bd970f64a6301fa75ae2eb22 3

有没有目标,你都有可能抵达/无法抵达终点。但有了目标,可以让你抵达终点的速度变得更快一些。

MacBook Pro on brown wooden table

bundle audit 命令失效怎么办?

我最近在使用 Github 来做 Rails 的 CI 自动检查时,发现 CI 自动检查时使用的 bundle audit 命令失效了,搜索后发现,是 Bundle 将 audit 拆为了单独的 gem ,而 CI 的模板并未更新,导致在调用的时候出现了错误。

d2b5ca33bd970f64a6301fa75ae2eb22 1

既然明确了问题,解决就变得简单了。只需要在 CI 的脚本当中,加入对应的 gem 安装命令,即可完成修复。

  - name: Install bundle audit
        run: gem install bundler-audit

black flat screen computer monitor

通过 Code Snippet 提升效率

在开发应用的时候,我们常常会借助快速生成工具来帮助我们生成一些模板代码。

相比于 JS,Ruby 干脆让很多需要手动输入的地方可以不用输入,体验会更好。Rails 更是做到了极致,大量的约定。对于一些模板化的行为,你甚至可以不用写代码,框架帮你来解析。

常见的编辑器比如 VSCode、Sublime Text 都提供了大量基于插件的 Code Snippets,方便你可以快速生成一段模板代码。

不过在实际开发过程中,他们提供的模板代码可能并不太符合我们的需求,我们往往可能会有一些定制化的需求需要满足,这个时候,就比较依赖自定义模板了。

好在各种编辑器不止可以通过插件来定义 Code Snippet,你还可以自定义自己需要的 Code Snippet。

以 VSCode 为例,你可以参考其官方文档来定义自己需要的 Code Snippet,只需要简单的配置,就可以定义出你自己所需要的 Code Snippet。它可以是你自己写代码时的 Code Snippet,也可以是你在写博客时的 Code Snippet(比如写博客时自动生成前置的描述信息)。

不过,Code Snippet 的语法很多时候比较麻烦,需要一行一个字符串,对于较为复杂的 Code Snippet,构建这个 Code Snippet 本身就比较麻烦。好在有一些第三方工具,可以帮助简化这个过程。比如 Snippet Generator 就可以非常方便的帮助生成 VSCode 的语法,你只需要将需要生成模板的代码粘贴在左侧,并填写一些基本信息,就可以生成包括 VSCode、Sublime、Atom 的 Code snippet 代码,再将其粘贴到你的 VSCode 的配置中即可。

d2b5ca33bd970f64a6301fa75ae2eb22
Snippet Generator

你还可以将其中的一部分内容替换为对应编辑器所提供的占位符,就可以帮助你更加高效的利用这个 Snippet 来完成内容的快速撰写。

其他

text

如何用 SSH Config 来优化你的 SSH 连接?

在 Windows 的时候,我一度非常喜欢使用诸如 XShell 之类的软件,主要原因是我可以将不同的服务器信息保持在同一个软件当中,不用每次都手动保存(Putty往往就无法保存)。

而到了 macOS 之后,我不再使用 XShell 这样的软件来完成我的 SSH 工作流(事实上我也找不到类似 XShell 的软件,后来在 Setapp 软件包中发现了 Core Shell,但我已经有了下面的技巧了,就没再用)。

经过一番研究,我发现对于我的诉求来说,其实完全没必要使用一款第三方软件来完成,SSH 自带的功能即可完成。

再次 Review 一下我的诉求:

  1. 我希望不要输入 IP 地址,而是输入一个短语,或者是域名来连接我的服务器。
  2. 我希望能够支持自定义端口,因为我一般会把我的服务器端口从 22 改为一个随机的数字。
  3. 我希望可以指定密钥文件,因为我有多个密钥,不通的场景可能使用不同的密钥。

这些诉求如今我的新方法都可以实现。

SSH 支持自定义 Config 文件,而默认的 Config 文件位于 ~/.ssh/config 这个文件中,你可以在其中添加自己的配置来实现自定义 SSH。

比如这里用到的就是 SSH Config 中的 Host 定义,你可以以如下的规则来定义一个新的配置。

Host 主机名
    User 登录用的用户名
    HostName 登录用的主机名,可以是域名或者IP
    Port 登录用的端口号
    IdentityFile 需要使用的密钥文件

比如下图就是一个配置的例子

d2b5ca33bd970f64a6301fa75ae2eb22 3

通过在你的 Config 文件当中添加对应的定义,你就可以用 ssh 主机名 的方式来连接你的服务器了。

比如,我的树莓派的配置的主机名是 pi 那我就可以使用 ssh pi 的方式来连接到我的树莓派当中。

d2b5ca33bd970f64a6301fa75ae2eb22 5
shallow focus photography of man in suit jacket's back

稀缺、抗压与升职加薪

用发展的眼光看待自己的工作和生活当中,我提到,不少人总是在用静态的眼光看待自己。这些人不只使用静态的眼光看待自己,也一直在使用一个相对更加低阶的身份定位来锚定自己。

很多人没有意识到,你的薪资其实和两个部分有关:

  1. 你所掌握的技能在市场上的稀缺程度。
  2. 你所能承担的责任和担负的压力。

大部分秉承着「拿钱办事」心态的人,都在这两个点上做的不够好,一方面没有自己独特的技能点和生态位,导致在市场发生剧烈波动时,很容易因为没有任何特色而发生替换。另一方面,由于心态是「拿钱办事」,自然不愿意去承担更大的压力和责任。

而对于公司来说,一个极其标准化,没有任何稀缺性的产品,自然是不会给你升职加薪的;而这个产品如果也不愿意承担责任和压力,那我是真的想象不到有什么理由来为这样的一个产品支付更高的费用。

如果你发现自己很久没有升职加薪,不妨回过头来看看,自己是否满足了升职加薪的基本条件?