person standing near the stairs

为什么我选择「独立开发者」作为长期路线

我一直以来,对于自己的长期路线看待的都非常的明确 —— 我不愿走技术专家的路线,而是更倾向于走业务负责人的路线。

其背后是一套我自己看待世界的标准和逻辑:

  • 纯粹的技术专家的路线是一条死路。原因是技术专家本身没有问题,作为个人,成为技术专家也是一个可预期的路线和成长路径。但技术专家的反面是「文无第一,武无第二」。任何领域,技术专家永远都只能留下一个人,第二名就不再受市场的关注和欢迎。这使得大家不得不的内卷,让自己成为第一,把其他人踩在脚下。但风水轮流转,没有一个人能够在第一的位置上一直坐下去,因此就要不停的学习、不停的工作来保证自己的地位。终生不得休息。
  • 业务负责人的路线相对更难,但也更加多样化。业务是复杂的,人群、场景、手段、工具等的不同,都会造就出一个新的业务形态出来,而这些业务形态当中,除了部分存在赢家通吃的情况,绝大多数的市场往往都能容纳第二名、第三名的存在(一般来说,具有网络效应的产品只能容得下头部,容不下第二家)。这使得大家可以不用互相内卷,而是各做各的,服务好自己的客户,获得不错的收益。

综合上述的两条,我最终选择了业务负责人的路线,长期走下去。

如今的一个落脚点,便是独立开发者的实践。就像我一直和所有人说的 —— 独立开发者,不过是创业公司的 MVP

重置 MoneyWiz 数据

我的 MoneyWiz 已经使用了 4 年了,从 2018 年 6 月开始至今,记录了大量的消费数据、收入数据。

四年下来,我在 MoneyWiz 上记录了超过 6000 笔数据,这些数据记录了我过去四年的消费习惯、生活习惯、历史轨迹。

但另一方面,过去四年我的记录也极为不合理,比如过去的 4 年里只使用了 17 次退款(很显然退款次数不止 17 次)、大量的调整余额的行为(平均下来每 3 天就会调整一次余额)。这些都是一些不正常的数据,凸显出我在过去的四年里的大量不合理的记账行为。

也正是因为我的记录的不合理,过去我的数据并不能很好的支撑我针对自己的数据分析。因此,我希望在 4 年之际,重头开始,用一个更加正确、更加合理的方式来重新开始记账,并正确的使用 MoneyWiz ,来辅助我的生活。

如何处理历史数据?

历史数据虽然存在错漏,但毕竟也代表了我过去几年的消费习惯,不能完全舍弃。但另一方面,我也希望这些数据不要影响我的新的记账。因此,我将其从 MoneyWiz 当中导出来,并备份至 Google Drive。这样如何日后我需要重新对我的历史数据,依然可以基于我的导出数据进行分析。

备份数据

为什么不考虑 BeanCount?

其实我也有考虑 BeanCount,奈何看起来确实不是那么方便,且我认为很重要的「预算」和「预测」的功能都没有,这对于我来说,我认为是没有必要切换到 BeanCount 的。

不仅如此,我如果使用 BeanCount,还需要自行配置服务器,对于当下的我来说,我认为优先级不高,继续使用一个相对更加开放的记账软件(比如Moneywiz),可以导出所有数据,具备日后迁移到 BeanCount 的可能即可。

总结

在过去的四年里,我很感激 MoneyWiz 和自己过去耗费的心力,成功的让自己养成了记账的习惯。但另一方面,在接下来的时间里,希望我可以更好的完成记账,而不是像过去那样,给自己留下不可分析的脏数据。

CAPTCHA

为什么 2022 年了,依然让堂弟入 IT 的坑

在之前的文章里,提到过,堂弟最近在跟我学习编程。不过没有提到为什么我做出这样的判断,这篇文章就来聊一聊为什么要做这样决策。

任何决策都有其背后的上下文,基于这个上下文才能理解这个决策的原因。

我的堂弟来自村里,从小便是帮大伯种地做生意和喂羊,没少做农活。大伯家中虽然不能说是清贫,但也确实算不得富有。堂弟还有一个姐姐,目前在北京上班。

可以看出,堂弟的基础并不好,家中并不能给他提供太多的帮助,对于堂弟来说,如果不能留在外面,很有可能就要回到河南,做个小生意,或者找一个公司工作,拿着河南的平均工资。

在这种情况下,我判断堂弟的核心诉求应该是 致富,首先要解决致富的问题,从村里走出来,而不是随时有可能生意黄了,不得不回村里。

基于上述的判断,我给到堂弟的建议是从事互联网/IT的研发工作,而具体方向的划分,则是前端工程师

关于选择 IT 主要考量的因素主要有以下几个:

  1. 我可以给他一些指导。相比于让他自己完全从 0 开始进入 IT 这个行业,显然我的帮助可以让他稍微少走一些弯路。
  2. 即使 IT/互联网增长放缓,依然是一个高薪行业。即使目前 IT/互联网增长放缓,但也仅仅是相比于互联网本身。相比于更多的传统行业,IT 依然拥有相对可观的薪水收入和可预期的行业持续生命周期。对于从农村出来的堂弟来说,是一个不错的选择。
  3. IT/互联网的学历歧视较轻。不少的行业是存在学历的歧视的,如果员工没有相应的学历或是不是从特定的学校/专业毕业,就会存在歧视的情况。互联网因为本身没什么门槛,所以相应的歧视也比较少,更多是你是否有足够的能力来做这件事。如果有能力做,就不太会被歧视。而本科的文凭已经达到了行业的硬门槛水平线,堂弟需要的是锻炼自己的能力,让自己的能力达到可以求职的水平。

总体来说,我算是帮堂弟做了一个人生决定,从我上述的判断来看,没有什么大问题,但长期来看,还是要看他能否在这个行业当中坚持,并找到属于自己的路,并持续的走下去。

meditation

关于正念,我知道的

由于长期的焦虑和压力,我始终在寻求一些能够让自己摆脱压力或解决压力的方式和方法。正念冥想在最近几年,被宣传的「神乎其神」,那些练习了正念冥想的人宣称正念可以「10分钟冥想就可以达到休息一整晚的效果」,对于自认为压力比较大的我来说,自然是十分具有吸引力,因此,我也开始了漫长的正念练习。

我的正念练习其实开始的并不算顺利,冥想源自佛教,但又不同于佛教的冥想,因此,并不能单纯的理解为佛教的冥想,现代说的「正念冥想」是去除了宗教概念之后的产物。

正念意味着心在当下,活在此刻,心神不乱。它意味着在自然的觉醒状态下安顿心灵,不带任何偏见或评判。

《十分钟冥想》

从正念的介绍当中,其实大致可以知道正念能干嘛:让我们被扰乱的心神重归平静,用一种自然平静的心态来看待我们所处的状态。换句话说,正念并不能做到药到病除,更多只是能够帮助你回归平静,并用平静的心态来处理问题。因此,正念冥想并不适用于所有人,从我的视角来看,更适合那些情绪波动极大,容易出现易怒、无法集中注意力等问题的人。

当你摆正了对于正念冥想的认知,控制好自己的预期后,正念冥想就真正适合你了。


说完了正念冥想的基本认知,接下来说说在我自己学习冥想过程中,我认为对我有帮助的东西:

  • 《HeadSpace 正念冥想指南》:这是一个来自 Netflix 的纪录片 / 教程,由 HeadSpace 的创始人 Andy Puddicombe 所制作的课程,介绍了一些比较简单的冥想入门的方式。
  • 《十分钟冥想》:这本书也是由 Andy Puddicombe 所撰写的,相比于纪录片,提供了更加丰富的信息和上下文,对于理解正念的价值,会更有帮助。

如果你也打算学习正念,那么这两个资源应该会对你有比较大的帮助。


除了这些视频/书以外,现在看到最多的应该就是各种冥想的 App 了,他们大多提供了一些冥想的音频,可以帮助你快速进入都某些状态当中。对于初学者来说,借助于这些 App 和提供的引导,可以快速先体验到冥想的状态。但也需要注意到是,在真正意义上你需要冥想的场景中,你是无法依靠这些 App 的。这些 App 是好的教具,但不能太过依赖,不然就本末倒置了。

你需要在使用这些 App 的时候,尝试习得自主正念冥想的技能,这样才能在你真正需要正念冥想的时候,快速进入到状态。

man wearing white and black plaid button-up sports shirt pointing the silver MacBook

公司不是让你来学习的,但你可以在公司学到东西

最近堂弟毕业,我让他来和我一起住,顺便学习编程,希望借此机会,进入到互联网/软件行业,借助 IT 技术的力量脱贫。

在指导他的时候,我突然意识到了职场的另一层价值 —— 让你学东西。

我们常说,公司是要盈利的,所以公司不是让你来学习的,公司是让你来干活的。所以,我们更加关注自己在进入公司前的水平。但如果你能够用好公司的资源,确实也可以在公司当中学到东西。

1. 企业为你提供经验

企业通过剥削你,获得利益。但与此同时,你也因为被剥削,而获得了经验,这些经验可以帮助你积累经验、建立壁垒。从而成为一个更加强大的自己,让你能够更好的处理工作,以及跳槽到下一家公司。

2. 企业为你提供老师

在任何一家公司,作为一个新人,你都有值得学习的人。无论是你的直接管理者,还是你的导师,抑或是公司的 CEO。

作为一个新人,你可以放心大胆的去向这些前辈提出你的问题。从我以往的经验当中来看,绝大多数的人都有「好为人师」的「毛病」,所以,当你拿出问题去问他们的时候,他们都愿意给出一些思考的方向,甚至是直接告诉你答案。

当然, 你也会遇到一些人秉承着「教会徒弟,饿死师傅」的理念,不愿意教你,这也是正常的。遇到这样的人,你不要再找他来提问就好了,选择其他人来提问,学习。

总结

资产阶级和工人解决的剥削问题常被提上台面。不过作为打工人,我们既要看到剥削的坏处,也要意识到背后的好处,坦然的接受剥削的坏处,然后巧妙的利用剥削带来的好处,才是一个优秀的打工人。

woman signing on white printer paper beside woman about to touch the documents

职场小建议:事事需要 Double Check

独立开发者孵化器日常工作有感

在职场当中,一个常见的问题就是 —— 我以为我做到了,但其实我没做到。

比如非常常见的:

  • 我以为我和同事说了,但同事说没说;
  • 我以为我把信息同步到位了,但其实没有同步到位。

而一个非常简单的方式可以解决掉这个问题便是 —— Double Check

比如,你和同事说完之后,可以让她用她的理解复述一遍同样的问题。她说的时候便是你进行 Double Check 的时候,你可以很快发现你们对于同样的问题是否有相同的认知,哪些点上你们以为一致了,但其实没有一致。

在协作场景下,上下文的同步无比重要,因此,积极去做上下文的同步,才能做好你的工作。逐渐从职场菜鸟一步步往上走。

pile of assorted-title books

读书读的是个细嚼慢咽,但也是狼吞虎咽

我最近在读互联网圈爆火的《纳瓦尔宝典》,这本书不厚,但我读的非常慢,和我预想的完全不同。这本薄薄的书,却花费了我不少的时间,我读这本书读了快半个月,也不过读了 30%(大约 70 页),实在算不得快。

又会想起我之前读的《你是你吃出来的》,一两天就翻完了。

这样截然相反的结果让我思考,这是为什么?为什么我读纳瓦尔宝典这么慢?

仔细对比二者的不同,我得到了答案:

  • 对于《你是你吃出来的》,我在读之前,就知道这是一本不错的书,且我读它就是希望获得一些过去我没有的信息的,所以这本书对我来说就是完全输入。我直接阅读即可。
  • 对于《纳瓦尔宝典》,我在读之前同样知道这是一本不错的书,且他和我所在几乎是相同的行业。我虽然是希望获得一些过去我没有的信息的,但因为这里面有太多相似和过去共同的部分,所以我在阅读的过程中,时常会将其中的信息拿去放在我自己的经历当中去做对比。这种拿信息和我自己的对比,让我话费了不少的时间,基本上是读一页就要想一会儿。

哪一种好呢?我觉得都挺好,

  • 前者是让我获取新的信息,我从小白开始快速了解到一些信息,指导我的生活;
  • 后者是让我验证我的判断,我从新的信息里和过去的判断进行对比,增强了自己对于判断的认知,直接指导我的生活。

二者都挺好。

telegram

为你的 WordPress 站点配置 Telegram Instant View

Telegram 内置了一个非常好用的阅读功能 —— Instant View。Instant View 可以实现在 Telegram 内部重新对网站内容进行排版,从而为读者提供更好的阅读体验。

作为一个网站主,如果你希望对你的网站提供相应的支持,则可以自行在 Instant View 的网站添加你自己的网站进行适配。

为 WordPress 添加 Instant View 适配

访问 Instant View 官网,并使用你自己的 Telegram 账号登录

Instant View 官网

登录成功后,点击右侧的 My Templates,进入到 Templates 管理页面。

并在 Templates 管理页面中间的输入框中输入你网站任一文章的地址,并回车,你会自动进入到规则的适配页面。

规则适配页面

随后,在页面中输入你的站点的规则,这里我们可以使用其他开发者写好的规则。将规则粘贴在页面中

# Use Instant View version 2.0
~version: "2.0"

# Use this template only blog article pages
?exists: /html/head/meta[@property="article:published_time"]

# Get article text in <article> 
body:     //article

# Get title from <h1>

title:    $body//h1[1]
subtitle: $title/next-sibling::h2
author_url: //span[has-class("author")]//@href

# Get article cover image
cover: //img[has-class("wp-post-image")]

# Convert all iframe elements to inline element
@inline: $body//iframe[starts-with(@src, "/media/")]

# Remote header and footer
@remove: //article/header
@remove: //article/footer

# Replace p to figure
@replace_tag(<figure>): $body//p[.//img]

# Youtube Embedded Fix
@replace_tag(<figure>): $body//p[.//iframe]

粘贴并保存后,会自动在最右侧页面生成预览的效果。

加入规则适配后的效果

当你的规则适配效果无误后,接下来只需要点击右上叫的 Mark as Checked ,来标记该页面已经检查完车。

标记为检查成功

测试完成第一个后, 接下来你只需要在你的博客当中挑选出 10 篇文章,进行文章的验证即可。

验证至少 10 个页面才行

根据 Telegram Instant View 的规则,你需要验证满 10 篇文章,才能提交你的模板给官方人员审核。

提交后,你会见到这样的提示,接下来只需要等待你的模板通过测试即可。

提交成功

预览效果

在审核期间,你可以在编辑器页面右上角点击「View in Telegram」来查看预览的效果。包括你也可以复制里面的 rhash 的值,使用这个值来生成 Instant View 的链接分享给别人。不过,最方便的当然还是等官方审核通过以后再用。

预览效果。

总结

Telegram Instant View 的开发不困难,掌握了一定的 HTML 、XPath 的基础,就可以开发完成,简单的几步,就可以让你的网站在 Telegram 当中拥有一个不错的预览效果,这个时间值得去花。

text

为你的服务器配上自定义的登录界面

我自己在服务器上使用的是 Ubuntu 20.04,每次在登录时,Ubuntu 都会展示一系列的信息,冗余且在多个服务器上看不出差异,并不能非常友好的提醒我这个是哪个服务器。

于是,我决定对其进行自定义,改成我自己喜欢的样子。

1. 分析现有的 Message 格式

想要修改,就一下先分析一下组成结构。我截图所示的输出可以分为三个部分:header、motd 和 last login message

而我主要不满的是 header 和 motd 的部分,对于 last login message,我虽然觉得有些多余,但在很多场景下,确实可以用于提醒。所以我就不隐藏了。不过,如果你希望隐藏 last login 的话,可以在当前用户的根目录下创建一个 .hushlogin 文件来关闭 last login message

touch ~/.hushlogin

2. 修改 motd 和 header

修改 motd

motd 的全称是 Message of Today,他的内容被存放在 /etc/motd 当中,想要修改 Motd 的文字,只需要直接修改 /etc/motd 文件的内容即可。不过需要注意的是,motd 文件不支持做格式化,只支持展示默认的文本。因此,你可以通过在其中加入空行来引起注意。

修改 header

Header 部分存放在 /etc/update-motd.d/ 目录中,你可以通过修改这个文件夹下的文件来实现不同样式的 motd 风格。其中文件名格式为 优先级-文件名的方式进行组织,你可以根据自己的需要,创建适当优先级的文件。

比如,00-header 文件的源码如下

#!/bin/sh
#
#    00-header - create the header of the MOTD
#    Copyright (C) 2009-2010 Canonical Ltd.
#
#    Authors: Dustin Kirkland <kirkland@canonical.com>
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License along
#    with this program; if not, write to the Free Software Foundation, Inc.,
#    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

[ -r /etc/lsb-release ] && . /etc/lsb-release

if [ -z "$DISTRIB_DESCRIPTION" ] && [ -x /usr/bin/lsb_release ]; then
	# Fall back to using the very slow lsb_release utility
	DISTRIB_DESCRIPTION=$(lsb_release -s -d)
fi

printf "Welcome to %s (%s %s %s)\n" "$DISTRIB_DESCRIPTION" "$(uname -o)" "$(uname -r)" "$(uname -m)"

其中有价值的代码主要就是最后几行的输出。

类似的, 10-help-text 的代码则输出了文字。

#!/bin/sh
#
#    10-help-text - print the help text associated with the distro
#    Copyright (C) 2009-2010 Canonical Ltd.
#
#    Authors: Dustin Kirkland <kirkland@canonical.com>,
#             Brian Murray <brian@canonical.com>
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License along
#    with this program; if not, write to the Free Software Foundation, Inc.,
#    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

printf "\n"
printf " * Documentation:  https://help.ubuntu.com\n"
printf " * Management:     https://landscape.canonical.com\n"
printf " * Support:        https://ubuntu.com/advantage\n"

而我们自己如果想要控制,可以自己写一个文件,比如叫 01-custom ,在其中加入如下代码(这段代码可以生成一段黑底红字的输出,用于提醒我自己这是生产环境服务器),并执行 chmod +x /etc/update-motd.d/01-custom 来设置可执行权限。

#!/bin/bash
printf "\u1b[31mwelcome to ixiqin.com production server\n"

这里需要注意的是,/etc/update-motd.d 目录下的文件本质上是一个可执行文件,你可以使用 bash / dash 等任何 Shell 来实现,也可以考虑使用 Node.js、Python 之类的脚本来实现。这样就不用像我一样,使用 Termial Color Code 来实现颜色的变化。

执行完成后的结果如下

根据需要自定义

当你找到了具体的文件的位置和配置的方式,就可以根据自己的需要来调整 /etc/motd/etc/update-motd.d 当中文件的内容,来达到你想要的效果了。

这样,就完成了对于 Shell 的登录界面的改造工作了。

Switch 游戏: 雪人兄弟 Special (SNOW BROS. NICK & TOM SPECIAL) 游玩体验

最近王大夫帮我把 Switch 的充电问题给解决了,我又可以开始玩 Switch 了。

第一波开始玩的,是雪人兄弟。我上一次玩这个游戏还是在小学的时候,在同小区的小朋友家插卡带玩的。现在 Switch 上也有了,刚好这两天低价促销,就买了下来。

关于游戏

雪人兄弟的 Switch 版本分为多个版本。其中的 Arcade 重置版模式,则和我们小时候在卡带上玩的版本一样,一关关的向上突破。

此外, Switch 版也支持多个手柄一起玩(意味着你可以和朋友一起玩)。

在整体的游玩体验上来讲,是非常不错的,可以让你回顾一下小时候玩雪人兄弟的感觉。和小时后的雪人兄弟一毛一样。

此外,如果你希望在界面上再回顾一下小时候的感觉,还可以切换画面模式为 Green(绿屏)或 Black & White(黑白屏模式),并开启扫描线,来回溯小时候的那种 CRT 大块头电视的效果。

关于游戏的背景故事

小时候玩雪人兄弟的时候并没有关注雪人兄弟背后的那些故事。这次在 Switch 上就顺便看了一下雪人兄弟的背景故事。

第一感受

我在看完过场动画以后,第一感觉是故事内核和马里奥一毛一样。 X 国家被 Y 国家攻占,Y 还抓走了 X 的公主,X 国家的人奋发图强决定救回公主。

然后又想了一想,觉得和马里奥还是有点区别的 —— 马里奥是爱情,雪人兄弟是亲情。。。因为雪人兄弟被抓走的是雪人兄弟的姐妹,而不是爱人。

图片版

文字版

在遠方,有個寧靜祥和的冰雪樂園。 然而在某一天,卻遭到了Hotteda王國的Artich王的襲擊。 雖然冰雪樂園的孿生王子尼克和湯姆試圖阻止,但卻被Artich王下詛咒,變成了雪人。

而孿生公主Puripuri和Puchipuchi也被綁架,成為了人質。 再這麼下去…冰雪樂園就要完全融化,消失殆盡了。 為了拯救冰雪樂園,恢復原有的寧靜祥和,尼克和湯姆王子踏上了漫長的遠征路途。

「我一定會救出公主們,並且破除詛咒!」

「出發! 雪人兄弟們!!」