献给所有和我一样迷茫的人

源自史蒂夫·乔布斯在斯坦福大学演讲

再次说明的是,你在向前展望的时候不可能将这些片断串连起来(上文指乔布斯退学);你只能在回顾的时候将点点滴滴串连起来。所以你必须相信这些片断会在你未来的某一天串连起来。你必须要相信某些东西:你的勇气、目的、生命、因缘……这个过程从来没有令我失望,只是让我的生命更加与众不同。

有些时候,生活会拿起一块砖头向你的脑袋上猛拍一下。不要失去信仰。我很清楚唯一使我一直走下去的,就是我做的事情令我无比钟爱。你需要去找到你所爱的东西。对于工作是如此,对于你的爱人也是如此。你的工作将会占据生活中很大的一部分。你只有相信自己所做的是伟大的工作,你才能怡然自得。如果你现在还没有找到,那么继续找、不要停下来,只要全心全意的去找,在你找到的时候,你的心会告诉你的。就像任何真诚的关系,随着岁月的流逝只会越来越紧密。所以继续找,直到你找到它,不要停下来!

当初次听到这段文字,不经心生澎湃,迫不及待放在博客首页,当作践行人生的指南。乔布斯这里也强调了成长的意义,这种意义可以作为人生的指南,让人在迷茫的时候找到前进的动力,找到心的力量!

独立开发之路

Photo by Octavian Dan on Unsplash

2016年6月计算机硕士毕业之后进入移动地级市公司工作。原本以为国企铁饭碗很香,也没想到那么快会对这份工作失去兴趣。每日的工作主要是取数和资产管理类工作,中间穿插大大小小的培训,我觉得这样的生活不是我想要的,于是想到了跳槽。

17年5月离职去了另一家相对轻松的国企做数据库管理工作。和上一份工作相比,这份工作显然轻松了很多,每天基本就是看数据库相关的技术书籍,这个阶段学到了很多东西,比如基础的 Linux 运维、自动化的一些工具、系统学习了 Python 和 Shell 脚本。

18年8月上岸现在的单位,接触全栈开发相关内容至今。经过不断的折腾,用 Python、Nodejs、Go、C# 都做过工程,目前熟悉的技术栈是 React + Gin。

2021年5月开始构思自己的产品。在小城市,体制内的工作还是最香的。但是招聘信息碎片化,不够系统,不利于研究分析。为此正在做一个职考类相关 App。采用微信服务号+H5的形式完成最小化可行产品(Minimum Viable Product, MVP)验证,后续看发展可能采用 Flutter 做双端。

系统架构设计师备考指南2022修正版

2020年9月至11月初本人业余时间都用来备考软考系统架构师这一科目,最终以选择题59 案例58 论文53 的成绩顺利通过。因此想分享一下备考中的干货,让备考的同学多一份指南,少走点弯路。

免费备考资料以及付费咨询

本文涉及到的复习资料全部在微信公众号芝士职考上,回复系统系统架构师即可免费获取。

若有一对一咨询(免费!)可以加我微信备注(架构咨询)。

考试时间

系统架构师考试一年一次,每年11月上旬进行考试。小伙伴需要安排好时间,战线不需要太长。我个人建议,一般基础较差(不做一线开发)至少3个月时间,做开发的同学1-2个月就可以。也就是说8月-9月是最好的复习开始时间,之前你可以大致了解一下备考情况。

考试意义

这场考试对于每个人的意义都不同。但是我可以负责任的说,假如你是单纯为了显示自己多牛逼,建议不要报考,这玩意儿在如此卷的计算机行业没有什么含金量 。另外许多机构会吹什么计分落户,国际认证···。但是我相信对于90%的人来说,基本都是为评上高级工程师职称,每年可以多加那小几千块钱(我考试那年,我们考场来了一个50多岁大叔,监考员看了也十分惊讶,后来得知也是为了评上副高,略微提升下退休待遇。)。

继续阅读系统架构设计师备考指南2022修正版

umi-fabric 帮助写代码的工具

https://images.unsplash.com/photo-1554034483-04fda0d3507b?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb

一开始我对 lint 类工具不太感冒,觉得只要运行没问题就 OK 了,但是当入门之后想精进一步,lint 会帮你查漏补缺(群里的一个大佬提醒我的),帮你写出符合规范的代码。结合框架umi,查到了 umi-fabric ,一个包含 prettier,eslint,stylelint 的配置文件合集(我个人 stylelint 用的比较少,因为基本都是 tailwindcss )。

继续阅读umi-fabric 帮助写代码的工具

但行好事,莫问前程

人要建立自己的价值归宿,并把它放在做人与行事之前。人要忠于这个价值判断而非利益判断。发现价值,推扬价值,才能让自己的心归于平静,让做的事变得高尚。这里价值是多元的,但必须是有道德内涵的。比如对于商业竞争来说,要合理竞争,不做小动作互相攻讦,对客户服务来说,要优化服务,为客户着想,诚信为本,不能坑蒙拐骗。另外的内涵是,一件事做成与否固然重要,过程比结果更为重要。君子爱财取之有道。但是若失败赔本,也不是说我就是失败者,只不过可能这个方向错了,或者说我能力不够,求道本身已然是一种修行。这个其实也和第一个内涵一脉相承。

突然想到一句话,那就是但行好事,莫问前程。

学习与地图

若把学习比喻成一场旅行,那么,书本就是出发前必须要准备好的地图。这个比喻我在极客时间——手机摄影这门课里看到,深以为然。这个观点很有意思,我认为包含两层意思,好的书如同一本绘制清晰的地图,能让你在对即将学习的知识有一个全面的了解,这个认识可以让你在面对实践中产生的问题时,能定位问题产生的原因和解决的办法。另外,知识也是在不断丰富和变化的,若拘泥于书本,不去从其他地方求新知,则会陷入固步自封的境地,也不利于自身成长。

Golang Web 权限设计(简)

https://images.unsplash.com/photo-1627483262268-9c2b5b2834b5?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb

用户与角色

角色设计的意意义可以帮助前端根据权限的不同展示不同的菜单。对于我这个后台就是不同的角色要对应不同的侧边菜单。这里我选择了 antd pro 重组件,他里面有一个 menu 控制侧边栏的展示。我要做的就是设计一个用户模型,一个角色模型,还有一个系统菜单模型,然后通过关联关系将它们联系起来。

这里的难点也许是,你必须要理解前端的动态菜单的生成需要哪些属性。一个菜单包含哪些属性必须由前端来定夺。可以看到antd pro 的动态菜单支持的属性,然后仿照它来设计一个菜单模型。

继续阅读Golang Web 权限设计(简)

体验是一种生活方式

红面蛋龟-摄于2021年11月11日

越来越觉得体验是才是生活的本质。体验式生活,一方面让我不用再把学习、工作当作达成功利的手段,而是把它们当作体验生活的途径,沿途遭受得顿悟、成长、痛苦和麻木带来得喜悲即生活本身。另一方面,这种生活哲学,让人不用为自己设限。因为去做本身就是一种体验,而体验本身就是生活。存在主义让现存的功利主义变得毫无意义。这也是我信奉地人生哲学。从这个角度来说,存在主义也在一定程度解放了我的思想,让我认可了人生是不能被定义的这一个定义(无论是成功还是失败)。

我承认,这样的生活方式不可避免地脱胎于我的阶级(三四线城市的小市民)。若没有稳定的收入,舒适的生活,我也很难说出让他们体验生活的话,可能相比生活的体悟,他们更要那种功利主义的人生哲学,那种可以改变他们生活,让生活好起来的思想。

存在主义与命理学

https://images.unsplash.com/photo-1473496169904-658ba7c44d8a?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb

萨特说”存在先于本质“,意思是人的本质实在人出现后产生的。我的人生该怎么过,完全依靠我自己决定,在选择成为什么样的人上,人是完全自由的。进而衍生出来的是,人的命运也不是写在天上写在书里的命理,人人都可以做他想做的事,朝他想变的方向去改变。而命理学认为的人的命运是写在天上,写在书里,关键结点都可以被预测。通过生辰八字以及衍生的一系列算法,你的一切都已经注定(宿命论)。

这样一看萨特思想更容易被现代人所接受,毕竟怎么会有宿命呢,我们人人都可以改变做自己的主任,主宰自己的命运。但是王德峰老师提到,决定命运的除了我们的意志,还有天灾、出生、环境等这些外在因素和客观条件。这些“突然落在”直接落在我们头上的因素可以称作“命”。对于这些,存在主义也承认自由收到了限制。

所以,这是不是命理学的胜利呢?

Gorm 关联关系彻底区分

https://images.unsplash.com/photo-1505686994434-e3cc5abf1330?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb

多对一 Belongs To 与 一对多 Has Many

// `User` 属于 `Company`,`CompanyID` 是外键
type User struct {
  gorm.Model
  Name      string
  CompanyID int
  Company   Company
}

type Company struct {
  ID   int
  Name string
}

一对多和多对一的区别在于语义侧重点不同。你可以说一个工人属于一个工厂也可以说一个工厂有多馆工人,前者是多对一,后者是一对多。

// Company 有多个 User,CompanyID 是外键
type User struct {
  gorm.Model
  Name      string
  CompanyID int
}

type Company struct {
  ID   int
  Name string
  Users User[]
}

在实际的操作中就是要看你是要查公司然后顺便知道这个公司下有多少工人,还是要知道一个工人对应的公司是什么。Gorm 提供了预加载 Preload 来做这一点 。所以多对一和一对多的区分前提是你知道自己要什么,然后定义它,最后用 Preload 来得到它。

继续阅读Gorm 关联关系彻底区分

微信H5开发环境配置指南(全)

https://images.unsplash.com/photo-1594909122845-11baa439b7bf?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb

微信H5想要真机开发没有小程序那么方便,都需要授权安全域。为此把内网地址映射到公网上十分必要。经过我两天的尝试,试了一些穿透工具,只有自建+frp是最满意的结果,其他方式都基本不可用或者需要花钱才能达到可用。我总结如下。

花生壳

这个不多说免费没有80端口,也不固定域名。付费门槛又很高1000+年付。放弃。

ngrok

官网 https://ngrok.com/download 。ngrok MACOS 下使用手册是这样。

继续阅读微信H5开发环境配置指南(全)