跳到主要内容

· 阅读需 12 分钟
Seven Wate

在完成了数字基建、运行平台的搭建后,迎来应用服务 - 生产力工具的搭建;生产力工具主要从公共服务、工具、程序开发三个方面来说。由于全文篇幅字数较多,故分为上下两篇分开阅读。

博客

博客(Blog)是一种在线日记形式的个人网站,借由博文、图片或视频来记录生活、抒发情感或分享信息,能够让读者以互动的方式留下意见,是许多博客的重要要素。

我所有的一切都源于博客;第一次写博文是在 2012 年、第一次搭建博客系统是在 2018 年、并于 2020 年底加入十年之约社区。截至到 11 月 30 日已经走过了 1626 天,现在博客已经是我生命中不可或缺的一项。

WordPress

WordPress

2003 年 5 月 27 日,Matt Mullenweg 和 Mike Little 创建了 b2/cafelog(一个博客系统)的一个分支,宣告了 WordPress 的诞生。到了 2011 年 12 月,3.0 版本已经被下载了超过 6500 万次。目前,互联网上超过 43% 的网站是 WordPress 创建的。

WordPress 是一个以 PHP 和 MySQL 为平台的自由开源的博客软件和内容管理系统。WordPress 提供主题、插件、多作者协同、移动设备等特性,同时 WordPress 也是目前因特网上最流行的博客系统

WordPress 是我第一次搭建博客所使用的系统,后来没用多久便被 Typecho 吸引了。主要是因为云服务器孱弱的性能导致 WordPress 运行不流畅,所以 Typecho 便是我最优的选择。

Typecho

Typecho

Typecho 这个名字来源于团队内部的头脑风暴:Type,有打字的意思;Echo,意思是回声、反馈、共鸣,也是 PHP 里最常见、最重要的函数。将这两个词合并在一起,就有了 Typecho。

Typecho 的程序设计逻辑与 Wordpress 相似,通过插件与模板机制对程序进行扩展。Typecho 主要支持 MarkDown 语法、响应式设计;同时 Typecho 程序本体不到 500KB,仅仅 7 张数据表带来了 WordPress 不可比拟的响应速度

我用了 Typecho 很长一段时间,但是我认为官方似乎停止了支持,仅仅有一些零散的缝缝补补;不过时隔三年 Typecho 迎来了 1.2.0 版本,但缺少新鲜血液的注入是我放弃 Typecho 的最大原因。

Halo

Halo

Halo 一款现代化的开源建站 / CMS 系统,其社区背后运营主体是飞致云。现在的开源项目在靠爱发电和商业化运行的权衡中总是难以取舍,终究一旦是没有新鲜血液的注入就会渐渐没落。

Halo 作为开源项目同时拥有商业化运营,其易于部署、完善的模板系统、附件系统、评论系统正是我所想要的。因为 Halo 基于 Java 开发,所以相对于 PHP 开发系统资源占用较高,勉强还可以接受。 不过现在 Github 有位作者基于 Halo 的开源组件,使用 Go 语言重构了 Halo 并改名为 sonic;sonic 相对于 Halo 最大的优点就是系统资源占用缩减了 50 倍,仅仅占用 10mb 左右内存。目前一直在用 Halo,将来可能会更换到 sonic。以后的事情以后再说 ~

那个博客系统好?

喜欢那个就用那个,没有喜欢的自己写一个。 因为我见太多太多博客折腾了很久,但是并没有持续的产出文字,所以不要忘记初心是为了什么!

静态博客好用么?

静态博客最大的弊端就是评论。 因为博客最重要的属性就是能与读者通过有限的评论互动,所以如果能解决掉评论的问题,静态博客也许会是最好的选择

碎片化知识

二十一世纪信息大爆炸,不同以往信息传递更新慢;现在各种各样的碎片化信息充斥着生活,其更易学、更易用;但是管理起来却很不方便,针对这个问题我使用了 memosmassCode,分别用来管理文字和代码。

memos

memos

memos 是 flomo 的一款开源孪生 web 应用,其无需格式、无需排版、无需分类,可以通过多种方式,随时随地记录你的想法。

Flomo 只专注于记录与整理想法,拒绝 All in one

massCode

massCode

massCode 是一款开源代码片段管理软件,类似于 Github 的 Gist;支持 Markdown、演示模式、搜索、自动保存、截图分析、WebDav 同步等特性。同时 massCode 支持全客户端一致体验,无须担心多端协同的问题。

维基

个人知识体系是学习、工作生活中必不可少的四库全书,通过不断完善、管理、精进个人的知识体系,可以让我们在工作生活中更得心应手。我的维基知识库主要分两个:知识脉络架构清晰的个人知识库、网页报告等零散资料的维基知识库;分别使用了 ObsidianZotero 来实现和管理。

Obsidian

Obsidian

Obsidian 是一款支持 Zettelkasten 笔记法的笔记管理软件,同时支持 Windows、Mac 和 Linux 三大平台。Obsidian 的关键词:第二大脑、本地文件管理、Markdown 格式、丰富的插件等。

目前我的知识体系就由 Obsidian 作为基石,利用 Docusaurus 作为展示平台开放在 wiki.7wate.com 。目前通过不断地尝试、实践、总结已经形成了高效的生产力!

Zotero

Zotero

Zotero 是一款自由及开放源代码的文献管理软件,用以管理书目信息(如作者、标题、出版社、摘要、阅读笔记等)及相关材料(如PDF文件)。其最著名的特性是作为浏览器插件、在线同步、与文档编辑软件如 Microsoft Word、LibreOffice、OpenOffice.org Writer、NeoOffice 等集成,可生成文内引用、生成页面脚注或文后的参考文献。

Zotero 在我这里主要的作用就是收集、整理、归纳零散的资料,例如:网页好文、研究报告、书籍文档等。Zotero 支持多终端平台使用,可以通过 WebDav 方式同步。

RSS

RSS(RDF Site Summary / Really Simple Syndication),中文译作简易信息聚合,也称内容聚合,是一种消息来源格式规范,用以聚合多个网站更新的内容并自动通知网站订阅者。使用 RSS 后,网站订阅者便无需再手动查看网站是否有新的内容,同时 RSS 可将多个网站更新的内容进行整合,以摘要的形式呈现,有助于订阅者快速获取重要信息,并选择性地点阅查看。

RSS 为打破信息茧房而生

RssHub

RssHub

RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以给任何奇奇怪怪的内容生成 RSS 订阅源。RSSHub 借助于开源社区的力量快速发展中,目前已适配数百家网站的上千项内容。

目前我所有的新闻、资讯来源全部由 RSSHub 贡献,同时定期管理添加新的订阅源以有效杜绝信息茧房。现在我每天早上的第一件事就是阅读 RSS 订阅源!

导航

nav

导航服务完全是我个人强迫症开发的浏览器首页,主要还是忍受不了现在奇奇怪怪、各式各样的浏览器首页;那还等什么?动手燥起来!

网盘

file

网盘平时主要是用于和朋友分享较大的文件、网络移动 U 盘的作用;网络上有很多很多很多的实现方案,例如:AlistZFileH5ai 等,我们喜欢那个用哪个。

引用

来源:博客 - 维基百科,自由的百科全书;仅学术引用,著作权归作者所有。

来源:WordPress - 维基百科,自由的百科全书;仅学术引用,著作权归作者所有。

来源:Typecho - 维基百科,自由的百科全书;仅学术引用,著作权归作者所有。

来源:Halo;仅学术引用,著作权归作者所有。

来源:flomo · 浮墨笔记;仅学术引用,著作权归作者所有。

来源:massCode | A free and open source code snippets manager for developers;仅学术引用,著作权归作者所有。

来源:玩转 Obsidian 01:打造知识循环利器 - 少数派;仅学术引用,著作权归作者所有。

来源:Zotero - 维基百科,自由的百科全书;仅学术引用,著作权归作者所有。

来源:RSS - 维基百科,自由的百科全书;仅学术引用,著作权归作者所有。

来源:介绍 | RSSHub;仅学术引用,著作权归作者所有。

· 阅读需 6 分钟
Seven Wate

互联网时代开放、自由、无感的网络访问环境极其重要。基于天朝特色社会主义,「数字文具盒」特地衍生出番外篇——涉及网络环境的建设。主要从 DNS 和 网络 两个点切入,最终打造开放、自由、无感的数字生活。

DNS

域名系统(Domain Name System,DNS)是互联网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。其实 DNS 的作用非常简单,就是根据域名找到对应的 IP 地址。你可以把它想象成一本巨大的电话本。

基于天朝的国情,DNS 存在不同程度的污染情况以及法律法规的约束。例如前阵子 github 的 IP 地址被解析为天朝反诈骗中心、私自搭建公开 DNS 服务器更是违法行为。你想想,你带着老婆,坐着火车吃着火锅唱着歌。突然想给黄四郎打个电话,却被麻匪接到了。自建 DNS 就可以完美地解决这个问题。

AdGuard Home

AdGuard Home 是一款用于拦截广告和跟踪的全网软件。设置完成后,它将覆盖您所有的家庭设备,您不需要为此安装任何客户端软件。随着物联网和连接设备的兴起,能够控制整个网络变得越来越重要。AdGuard Home 中提供了自定义 DNS 上游服务器以及 DNS 改写的功能,其他类似功能的软件可以达到同样的效果。

AdGuard Home 以及其他类似功能的应用部署场景应该局限于家庭网络、局域网络,切记非必要勿公开。下面是推荐的上游 DNS 服务器:

# 加密 DNS-over-TLS
https://dns.alidns.com/dns-query
https://doh.pub/dns-query
https://dns.google/dns-query
https://dns.cloudflare.com/dns-query

# Bootstrap DNS 服务器
223.5.5.5
119.29.29.29
8.8.8.8
1.1.1.1

网络

网络就是老生常谈的天朝局域网与世界局域网之间存在链接不稳定、网站无法访问等问题。网络问题的解决方案实在是太多了,我简单说一下心得。

  1. 狡兔三窟,一常多备。
  2. 切勿违法,反复横跳。
  3. 巧用代理,嘎嘎嘎香。

服务商

首先介绍几个常用的网络服务商,附有推广链接不喜勿喷。😍

  • TAG:我用了好几年体验最好的服务商。
  • WgetCloud:备用服务商,年付费 12 元 10GB 流量。
  • Hutao:备用服务商,年付费 90元 600GB 流量。
  • RelayCloud:备用服务商,年付费 15元 每季度 32GB 流量。
  • 一元机场:备用服务商,年付费 11元 每月 100GB 流量。
# TAG
https://tagss.pro/(官网)
https://tagss.pro#/register?invite=WB9TeKhc(推广链接)
# WgetCloud
wgetcloud.ltd(官网)
https://invite.wgetcloud.ltd/auth/register?code=9GQH(推广链接)
# Hutao
https://hutao.cloud/(官网)
https://hutao.cloud/auth/register?code=Z2J1(推广链接)
# RelayCloud
https://relaycloud.pro/(官网)
https://relaycloud.pro/auth/register?code=310d(推广链接)
# 一元机场
https://一元机场.com/(官网)
https://xn--4gq62f52gdss.com/#/register?code=TeInX4mK(推广链接)

每家网络服务商生怕新手小白不会用,各平台都提供了对应的教程。如果条件允许的情况下,可以在一台硬件设备(路由器,服务器)部署代理和 DNS,然后每台客户端链接代理服务器访问网络。

代理服务器部署成功后,例如 Linux、Shell、pip、docker 等各种需要稳定的网络访问环境下都可以使用这几条命令解决:

# 代理 IP 地址更换为本地代理 IP 地址
export http_proxy="http://10.0.0.199:7890/"
export https_proxy="http://10.0.0.199:7890/"
export no_proxy="127.0.0.1,localhost"

最后切记网络也不是法外之地,开始尽情地享受互联网时代开放、自由、无感的数字生活吧 ~

来源:域名系统 - 维基百科,自由的百科全书;仅学术引用,著作权归作者所有。

来源:DNS 原理入门 - 阮一峰的网络日志;仅学术引用,著作权归作者所有。

· 阅读需 13 分钟
Seven Wate

数字基建准备工作完成以后,就要准备搭建运行平台;简单来说运行平台是云服务器与应用服务的中间层起着承上启下的作用。例如操作系统的选择、运行模式的规划、数据存储的模式、系统安全的完善。

因为我只有一台性能有限的云服务器,所以运行平台达到的最终目的是应用服务高内聚,低耦合

操作系统

Windows Server

Windows Server 是 Microsoft 专门创建用于服务器的一系列操作系统,旨在持续运行并为其他计算机提供资源。其提供便捷的 GUI 界面,Winodws 用户学习成本较低,可以快速上手。

除非特殊需求,绝大部分情况下都很少使用 Windows Server 系列操作系统。 因为其系统资源占用相对于 Linux 较高,通用性稍差以及社区文档支持较少。同时 Windows Server 作为一款商业化操作系统,高昂的授权费用也是令人头痛。但并不是不能用,只是我没有尝试过所以就不深入展开讲述了。

Linux

Linux 是一种自由和开放源码的类 UNIX 操作系统。该操作系统的内核由林纳斯·托瓦兹在 1991 年 10 月 5 日首次发布。Linux 具有跨平台、低资源占用、可靠的安全性、社区的支持以及开源授权等优点,在服务器操作系统领域让众多 ITer 爱不释手。Linux 在低性能云服务器领域几乎是绝对的王者,同时 Linux 丰富的发行版本和社区支持,基本上可以满足你 90% 的需求。Linux 发行版本最明显的差异就是社区的运营方式,可以分为开源基金支持和商业化运营。

Linux 那个发行版本好?

选择你最喜欢的,综合来说 Debian、Ubuntu 的使用率更高。 我会在不同的情况下选择不同的社区版本使用,目前最常用的就是 Debian。

Linux 主流社区

Linux 怎么安装软件?

根据发行版本,使用包管理器可以方便快捷安装软件! Linux 不同于 Windows 的图形化界面,大部分服务器管理方式也都是黑黑的命令行终端。但是 Linux 的日常系统更新,软件安装却只需要一条命令即可。

# apt 安装 git
apt install git

Linux 安装软件很慢

可以设置境内 Linux 镜像源或者使用代理服务。 因为大部分 Linux 的官方源的服务器都在境外,所以境内使用 Linux 官方源安装软件就会超级慢,使用体验和百度云没开会员差不多。国内的开源爱好者为了解决这个问题,维护了《一键更换国内软件源》仓库。

# root 用户
bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh)

# Sudo 用户
sudo bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh)

运行模式

云服务器的操作系统安装完成后,规划合理的运行模式依旧很重要。因为我的目的是应用服务高内聚,低耦合,所以我使用的是容器模式;最常用的就是大名鼎鼎的 Docker。除了容器模式,还有裸机运行模式;同时低门槛上手,文档完善的管理面板就是宝塔了。可以结合实际情况来选择,但是我真的不建议用宝塔。🤐🤐🤐

裸机

裸机模式就是应用服务直接跑在操作系统上,性能利用率高、性能损耗少。但是环境管理难,容易出现莫名其妙的问题而且还不容易找到原因。而且你需要面对黑黑的命令行管理终端,面对新手朋友及其不友好。

我就曾遇见一个网友学习使用 MySQL,当时他安装了两个版本的 MySQL,端口分别是 3306,3307。然后在数据库管理软件使用的 3307,命令行终端使用的 3306。最后命令行终端执行的 SQL 操作语句,在数据库管理软件中完全查不到数据。向我们提问这是为什么?最后真的无力吐槽了······

宝塔

宝塔面板作为国内一款安全高效的服务器运维面板,宝塔提供的 Web 管理页面让运维简单高效。可以一键配置:LAMP/LNMP、网站、数据库、FTP、SSL,通过 Web 端轻松管理服务器。但是但是它翻过车,曾有一个更新导致众多站长的数据库被爆,损失惨重! 虽然曾经翻过车,但是宝塔的学习成本低,上手容易入门快。所以就结合实际情况,理性使用。

容器

容器 (Container) 是一种基础工具。泛指任何可以用于容纳其它物品的工具,可以部分或完全封闭,被用于容纳、储存、运输物品。物体可以被放置在容器中,而容器则可以保护内容物。

Docker 是一个开放源代码的开放平台软件,用于开发应用、交付应用、运行应用。Docker 允许用户将基础设施中的应用单独分割出来,形成更小的颗粒,从而提高交付软件的速度。 Docker 容器与虚拟机类似,但二者在原理上不同。容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。

Dokcer 容器的特性就是虚拟化,提供一个隔离的环境。 例如你可以运行多个版本的应用服务,其环境不会产生任何冲突。现在绝大部分的应用服务都提供了 Docker 镜像,可以方便快捷的搭建、运行应用服务;例如搭建一个 nginx 服务:

docker run --name nginx -d nginx

数据存储

因为数据就如同水一样,应用服务缺失了数据也就失去了它的意义,所以数据存储尤为重要。数据库的选择,静态资源的管理备份等。数据存储备份还可以减少数据损失造成的价值损坏最小化。

小心使得万年船,常备份,多备份!

数据库

数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的资料执行新增、截取、更新、删除等操作。所谓数据库是以一定方式储存在一起、多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。

MySQL / MariaDB 哪个好?

应用服务需要那个就用那个,尽量选择通用版本。 MariaDB 是 MySQL 关系数据库管理系统的一个复刻,由社区开发,有商业支持,旨在继续保持在 GNU GPL 下开源。简单来说 MariaDB 就是 MySQL 的儿子。

其他的数据库管理系统可以用么?

结合实际情况; 虽然数据库管理系统千千万,但是常用的就是那几个呀。

备份

数据一样要多备份、常备份! 所有云厂商的云服务器都提供了相对基础的数据备份,但是他们不会保证你的数据一定不会损坏丢失。所以可以通过以下方式低成本备份:

  • 下载备份电脑里。
  • 下载备份硬盘里。
  • 加密备份云盘里。

总之就是一定要多备份,常备份!管它冷备、热备、异地多活总之就是多备份,一定不会错。淘宝上 500GB 的机械硬盘 25 元左右一块,买 4 块回来都做成冷备;公司扔一块、学校扔一块、家里扔一块、老家扔一块,理论上来说数据全部丢失损坏的机率为 (2^4+N)≤6.25%。

系统安全

系统安全是老生常谈的话题了,但是系统安全门槛高,各种问题层出不穷;最后也许你也不知道该怎么做好系统安全。基本从下面的两方面出发就可以快速杜绝大部分系统安全问题。

网络防火墙

网络服务最常用的端口,例如:22、80、443 等;如果你购买的是云服务器,那么你可以利用云服务商的防火墙管理面板只放开应用服务的端口。在使用 nginx 做代理的情况下,所有的应用服务基本都可以走 80 或 443 端口,那么服务器就可以只打开这两个端口,其他的包括 22 端口需要用到的时候再打开。Docker 容器模式下更可以使用网桥做内外网隔离,纵使攻击者进入了服务器,能进行的操作也只是有限的。

最最最坏的一种情况就是,全军覆没了。这种情况下,如果你做好了完全的、充分的数据备份,任由它随便攻击。

无所谓 ~ 谁会爱上谁 ~

DDOS

网络攻击最有效,最常见的一种方法就是分布式拒绝服务攻击(DDOS)。其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。这种情况下我们可以通过使用 CDN 来隐匿云服务器真实物理 IP 地址,让攻击者找不到攻击目标从而放弃攻击。

引用

来源:容器 - 维基百科,自由的百科全书;仅学术引用,著作权归作者所有。

来源:Docker - 维基百科,自由的百科全书;仅学术引用,著作权归作者所有。

来源:拒绝服务攻击 - 维基百科,自由的百科全书;仅学术引用,著作权归作者所有。

· 阅读需 4 分钟
Seven Wate

最近耗费了一周的时间迁移服务器,升级打造 V3 版本的「数字文具盒」。从 2018 年第一次尝试搭建博客,期间尝试各种生产力工具到现如今的第三次迁移服务器,终于打造了一个完美契合,效率至上的数字文具盒。在这期间踩了无数大大小小的坑,折腾了一次又一次;虽然折腾浪费时间,但是依旧是收获满满。

希望「数字文具盒」系列能帮到各位减少踩坑的几率,并尝试打造、升级个人的数字文具盒。本文先从需求出发,以提高生产力为导向;再以数字基建、运行平台、软件服务三个层次来递进实现,最终打造成适合的数字文具盒。

适合自己的才是最好的!

需求

  • 博客: 所有的一切源于第一场是搭建博客,通过博客也认识了更多网络上志同道合的博友。
  • 图床: 为了更好的管理静态资源,更可以减轻博客未来的迁移负担。
  • 网盘:用来给身边的朋友分享、下载文件。
  • git 托管: 个人代码的托管、镜像、同步。
  • rss 订阅: 信息聚合窗口,其可以有效打破信息茧房。
  • 文件备份: 平时工作、学习、生活中的文件异地同步备份。
  • 碎片笔记:减轻第三方平台的依赖。
  • 书签管理:减轻第三方平台的依赖。
  • 统计服务:减轻第三方平台的依赖。
  • 密码管理器: 这都二十一世纪了,密码管理器是人人都必须、人人都必要的生产工具!

以上内容就是第三次升级罗列出来的需求,加粗项目为务必实现的需求,剩下的为非必要项目。

目标

以过程为导向

如果你没有需要的专业知识或者经验不足,从来没有尝试折腾过这些东西;那么建议你参考我的经验,然后花费有限的时间、精力成本去累积经验。并且在折腾的过程中善用搜索引擎、社区提问、深度阅读官方文档。

这世上本没有路,走的人多了便有了路。

以结果为导向

因为这次数据文具盒的升级打造,我是整理好明确的需求来的,更专注结果的达成;所以在攒够了经验之后,务必带着明确的需求去实现结果,切勿一通乱折腾!

管他黑猫白猫,抓到老鼠的就是好猫!

倡导

如果在折腾的过程中,你发现了一个新的并不存在于互联网上的问题,那么恭喜你走在了其他人的前面。你可以尝试通过各种平台输出自己的经验贴为他人提供帮助,创造一份属于自己的价值!

互联网精神即:开放、平等、协作、快速、共享 。

· 阅读需 20 分钟
Seven Wate
  • 保持一颗解决问题的心
  • 了解你的用户
  • 不要拿自己的尺子去度量别人
  • 保持学习、be open-mind
  • 想清楚,再下手写代码
  • 敬畏用户
  • 跨团队合作是利益交换
  • 用别人的语言交流,会有意想不到的收获
  • 理解前人写的「烂代码」
  • 在技术和工作之间找到平衡点

来源:做了 6 年程序员,我学到的 10 条经验 | Randy's Blog;仅学术引用,著作权归作者所有。

保持一颗解决问题的心

按照我的观察,那些在工作中用技术取胜的人们共同点都在于他们能保持一颗解决问题的心。他们可以率先想到一种更优的手段解决存在的问题(一般是效率问题)。他们不是嗅觉特别灵敏或者技术特别强,而是当他们遇到了问题,不是把它作为抱怨的话题,而是开始思考这个问题为什么没人解决、应该怎么解决,然后把它实现出来。这种心态在职场上特别稀缺。

我在创业公司的时候做一个图文排版的 App, 设计师会设计一些模板,然后交给我来实现。当时我们有很多模板,为了测试这些模板实现在不同的手机屏幕大小会有什么问题,我们要花特别多的精力。可以想象测试的数量 = 模板数量 * 屏幕尺寸的数量。后来我用 puppeteer 写了个自动生成不同屏幕和模板的截图,直接交给设计师一个一个地看。节省了大量的时间。这个事情没什么技术含量,但它解决了很重要的问题。

工作中需要解决的问题不仅仅在代码上,也有可能出现在非技术问题上。工作中我特别喜欢和非技术同事聊天,了解他们的工作。因为我常常觉得影响项目前进的原因不一定出在我们用了不适合的技术或者不够「先进」的技术。了解非技术同事的工作流程让我大有收获,我会发现他们有一些工作是可以通过写一段程序把原本的工作量做到指数级的下降,而通常非技术同事是很难察觉到的。

这样的例子特别多。有次我和一个运营同事聊天,我们当时在开发一个新闻内容的管理后台,他们常常用这个后台对一些内容做分析。聊天的时候了解到他们有一部分的工作就是在上面按条件查询一些内容,再一条条地粘贴到 excel 里面,他说这常常要花一下午。后来我帮她做了一个一键导出成 excel 的功能。

她觉得这很不可思议,但这在技术的角度来说太简单了。我也因此了解到,对于不是做技术的人来说,他们很难察觉到哪一些事情是可以用技术解决的,所以我们不能希望他们主动地提出一个需求,只能我们作为掌握技术的人主动地去了解他们。

有一次我和我们的测试吃饭,聊到他们怎么做测试。我发现他们会用 mindmap 先梳理出来一些测试流程,然后一个个地做。但是痛点在于他们常常要手动维护一个文档列出这些 case 的测试结果,这些结果包括截屏,以及证明测试通过的请求返回信息等等。不但麻烦,还很难追踪。

于是我做了一个小 demo Web App,他们可以直接上传他们做好的 Mindmap, 通过他们的 mindmap 直接生成出

来 case item,在项目的开发环境页面代码里面,只要注入这个 case id,就可以在测试之前开始记录请求日志,结束之后会上传到这个平台,这样在这个平台就能直接看到每一个 case 操作的时候的整个过程的记录。这个小 demo 后来被用于花呗的大部分前端项目,当然听说现在已经做得和我当时做的小 demo 完全不同了。

了解你的用户

我自认为自己还算是一个有那么一些产品思维的程序员,因为经常也会写一些自己的小产品。但在刚出来工作的时候,我在工作中太沉迷于技术本身。把心思都放在了诸如怎么重构,怎么改进构建速度之类的问题。我在阿里 P5 升 P6 的答辩中,我被问了一个我至今印象深刻的问题:你有了解你的用户是怎么用你在做的这个东西吗?

这个问题是我从来没有想过的,我哑口无言。可能它只是一个晋升答辩问题模板中的一个问题,但对我来说这个问题让我清醒了许多。当时我们做的是内部用的新闻内容管理后台,这个后台的用户是一些小编。我们和这些小编有一个群,但基本是用来报 bug 的。我离这些用户这么近,却从来没有了解过他们的使用感受。我想,如果我当时找他们聊一聊,可能也会有意想不到的收获。或许他们会抱怨这个后台的加载速度很慢,我们就可以着手解决加载速度的问题,而不是和同事纠结在用哪种前端状态管理库这种无聊事情上。用户并不关心我们用的是 MobX 还是 Redux.

不要拿自己的尺子去度量别人

我刚出来工作犯的最大的错误之一就是拿自己的尺子去度量别人。我因为从小对编程痴迷,写程序对我来说是人生中最大的兴趣,我把几乎所有的时间都花在了技术上。当时我天真地认为所有程序员都应该像我这样,对待技术也应该有一种理想主义,我在互联网上结交的技术朋友都是这样的。所以我当时对我的同事特别苛刻,甚至对那些把写程序只当成工作的人嗤之以鼻。后来回想起来,这是非常错误的想法。每个人有每个人的追求,技术也只是多个兴趣爱好的其中一种。在当时别人的眼里我可能是个「怪人」,甚至有点「装逼」。

保持学习、be open-mind

我每天都会在 Twitter 和 Hackernews 发现很多最新的技术和思考,我关注了很多开源库的作者,我可以第一时间了解到他们最近在思考什么,在接触什么。这种主动接收会扩大你的眼界,让你在解决问题的时候有更广的思路。

不要只关注自己的领域。我还关注了很多写 Rust, 写 Go, 写 iOS/Android 的人。主要是学习技术背后解决问题的方式,这些解决问题的方式说不准也能应用到你自己的领域。

保持学习一直是和同行拉开差距最重要的一点。

想清楚,再下手写代码

我写代码的速度非常快,因为我已经花了超过十年的时间在写代码了。很多东西想实现,对我来说基本是纯粹的堆代码。导致我非常容易不经过多的思考就开始动手写。我为此吃了不少亏,常常写到一半发现一些没有想到过的问题,导致需要重新设计,重新改写。我的一位前老板很了解我,他也是个多年经验的程序员了。有一次我们在讨论一个新东西,他对我说,「不要着急,想清楚了再写」。这句话我一直记在心里。后来每次动手写代码之前,我都会把整个流程的设计先思考清楚,避免了很多不必要的重写。

敬畏用户

在写自己的一些没什么人用的开源库或者公司内部用的平台的时候,通常不需要过多思考就能把代码发布出去。到了做花呗这种用户基数庞大的产品,才意识到代码发布和以前所体验到的完全不同。

蚂蚁金服有代码发布的「三板斧」,这是从入职培训到实际工作中就会被反复提及的 must-follow rule. 「三板斧」指的是「可灰度」、「可监控」、「可回滚」。在代码发布之前,要先想想自己的代码是不是符合这三个条件。

你的代码发布之后,如果出了问题,是不是可以被监控到的?

你的代码是不是可以灰度发布的,而不是一下子全量被推到线上的?

代码发布以后,出了问题,是不是可以回滚的?如何回滚?

在经历了用户基数如此庞大的产品开发之后,我对代码发布变得尤为审慎。我记得有次只是单纯改了某段 HTML, 但我还是盯着这个 PR diff 看了几分钟,在想这个修改会不会导致什么问题。

虽然蚂蚁的基础建设可以让这三板斧很容易实现(有成熟的发布平台进行灰度和回滚,有成熟的监控库);虽然即使遵守了三板斧,还是会有 bug. 但是这种代码发布的思维模式是好的,即使我到了别的公司,我在代码发布前还是会问自己这三个问题。

跨团队合作是利益交换

在大公司里,有时在做一个事情的时候,需要别的团队一起合作,或许是用到别的团队的接口、或许是需要别的团队开发新的接口,但这通常很难。我以前天真地以为,只要我们做的事情是有利于业务的,别的团队自然就应该一起合作。但实际上,大家更看重的是这个事情对自己的团队有什么好处。

换位思考一下,我们和别的团队合作,对于他们来说,增加了工作量,增加了风险(带来更高的 qps, 写更多的代码会导致更多的维护成本)。决定是否合作,首先取决于这是否是自上而下的要求,其次就是合作对他们的 KPI 有没有好处。

所以我学会了在游说别的团队合作的时候,首先应该想明白合作能给别人带来什么好处,而不是对事情本身夸夸其谈。这样更容易促成合作。

用别人的语言交流,会有意想不到的收获

有研究发现如果你用别人的母语和他交流,他会更容易接受你的观点,对你也会更友好。我发现这个心理同样适用在技术交流中。作为一个前端程序员,在和后端程序员商量技术方案的时候,如果可以更多地使用后端的术语,从后端的角度反推前端的想法,他会更容易接受。

我自己业余是个 full stack 程序员,所以很容易切换到别人的语境,也能从别人的角度去理解他的想法。因此沟通会更加顺畅。

理解前人写的「烂代码」

这里的「理解」不是指理解烂代码的逻辑,而是理解为什么会写成烂代码。我经常会听到同事抱怨他看到的旧代码写得如何烂,但是实际上很多烂代码产生的原因不是因为技术不行,而是受限于技术的发展和业务的复杂性。随着自己写的代码越来越多,就越能理解这些「烂代码」的存在。看出来了烂代码,也不要着急去重构,这些代码很有可能藏着一些你不知道的特殊业务需求。如果你不需要碰这些代码,那就尽量别碰。

在技术和工作之间找到平衡点

在刚出来工作的前几年,我特别陶醉在把自己学到的新东西试图用在工作中。我的想法是,只有我把这个技术用到实际的工作中,我才算学习了这个技术。

其实这个想法是不对的,学习技术并不一定要求你把他用到工作中。工作就是工作,学习就是学习。工作的内容是为了业务服务的。我在创业公司工作的时候,曾经因为把一个我刚学习到的库用在业务中,因为一些我不知道的坑导致业务进度出了点问题。老板生气地说:业务不是你的试验田。

我后来遇到很多「后辈」(我竟然也开始有后辈了) 请教我说觉得自己在工作中不能运用到自己平时学习的技术,因此觉得自己技术没什么长进。我认为这种想法不太正确。

能把学习到的技术运用到自己的工作中当然是最好的,但这是可遇不可求的事。但是这不代表没有用在工作中,就等于没有真正学习到这个技术。我认为很多人对技术学习有错误的理解,对我来说,学习技术的精髓在于理解这个技术的 Why, What, How. 和能不能用到工作中没有太大的关系。

举个例子,我在刚接触到 Redux 的时候,我去学习它,除了了解它怎么用以外,我特别关心的是,Redux 的哲学是什么?是什么启发了 Redux 的作者创造了 Redux? 他和别的库有什么不同?顺着这些问题,我就会了解更多的东西,比如我发现 Redux 是受了 Elm 的启发,我就会去了解 Elm -> 了解 Functional Programming -> 了解 Immutable, 然后关注 Dan (Redux 的作者) 的 Twitter, 看他日常会分享什么,看他对自己做的这个东西的理解是什么。即使我没有把 Redux 用在工作中(事实上我从来没有用过 Redux),当我在学习这个库的时候,我学习到的不仅仅是 Redux 本身,还有它背后的更多东西。我可能很快就会忘掉 Redux 的 API, 但那又如何,那些它背后的知识才是最有价值的,是不会被忘掉的。

而工作则相当于是一个真实的场景,是在你学习新的技术的时候,帮助你进行实际思考的场景。你需要有意识地去想,这个技术如果用到我的工作中,它是否适合?它能解决什么问题?它为什么适合?它为什么不适合。当你在学习新技术的时候,结合这个技术,多思考这些问题,这才是真正的学习。

· 阅读需 4 分钟
Seven Wate

自己一条龙研发的 Halo 博客主题 Redemption 最近也是发布了首个正式版,在博友杜郎俊赏提供的 CleanCSS 工具下麻溜地搞定了,同时又添加了一些自己的想法。主要思路是首页做减法:删减无用代码文件、压缩静态资源体积,同时完全不影响首页的内容展示。

问题场景

整体未优化前

如上图博客首页未优化的加载速度,需要 2.03 秒并且存在可优化的余地。优化方案主要从静态资源、样式表、字体这三个方面出发。整套操作步骤下来,实测速度提升了近 5 倍。

0.内容分发(CDN)

傻瓜式优化就是 CDN,各个云服务厂商都有提供。最简单最省事最有效,CDN 具体优化步骤可根据厂商提供的文档操作。(有的要钱有的不要钱,有的好用有的不好用)

1.静态媒体资源

图片优化效果

首页如果有媒体资源,例如图片、Logo 等。那么最简单的方法就是压缩图片体积,便捷高效的提升首页加载速度。

2.CSS/JS 代码

如果想优化 CSS/JS 代码文件,可以尝试在博友杜郎俊赏提供的 CleanCSS 中一键优化代码。

CleanCSS 第一次直接优化了之后提升明显,但是发现 remixicon.css 字体图标有问题。然而这个优化还是最大问题,毕竟加上字体 1.3s,遂又找了其他方法实现(后来发现是我没用明白 CleanCSS 🤣)。

后来在 GitHub 上找到开源项目 UnCSS ,其提供了简单的在线优化,使用了一下满足需求足够用了。最后再利用在线 CSS/JS 压缩体积工具,就大功告成!

css优化

3.优化字体

常见的优化就是 CDN、静态资源、CSS/JS 代码,这里我为了追求更极致的速度,将字体文件也进一步优化。优化方向稍微偏激了,根据实际情况来。

因为 remixicon.css 的字体图标文件只用了几个,所以我利用 Github 上 font-spider 将无用的字符进行删减。如下图所示可以发现,字体删减优化是质的改变,体积缩减了近 70 倍!

font-spider优化

优化后

整体优化后

在特定问题场景下,通过一套操作优化后的首页体积仅仅 35kB,加载时间 597 毫秒。就连 CDN 都不用套,全国平均访问延时 0.6s。需要注意的地方是,优化字体比较偏激可能导致页面显示不正常。其次我为了避免其他页面出现未知错误,利用代码进行判断仅仅对首页进行了优化。

现在 H5 的 CSS 样式库越来越多了,网页效果越来越优美了,同时也变得臃肿了起来。不过只要网速快,优化个毛线!奥里给!!!

· 阅读需 3 分钟

img

Redemption 一款专注阅读、写作的 Halo 博客主题。主要设计思想即是专注阅读、写作,是一款极简类型的博客主题。

Redemption 部分设计灵感借鉴 Halo 博客 Zozo 主题,感谢各位前辈的无私开源。特意针对首屏加载进行优化,无需 CDN首屏 0.7s 内加载完成。全尺寸媒体自适应查询以及自适应深/浅色模式,让你专注写作,不带感情!

预览

预览

主要功能

  • 专注阅读写作设计
  • 深 / 浅色自适应模式
  • 全尺寸布局媒体自适应
  • Markdown 样式设计
  • 社交链接展示
  • 支持独立页面

安装方法

  1. 远程拉取:https://github.com/7Wate/halo-theme-Redemption 复制地址点击下载
  2. 本地上传:在 Github国内 gitee 下载) 页面,下载压缩包然后上传安装。

主题配置

  • 自定义博客标题以及短语,并填写对应备案号。
  • 自定义显示开往十年之约的 logo。

社交链接

  • 自定义关于页面、Github、哔哩哔哩、邮箱链接。

评论设置

  • 自定义开启评论,默认关闭。

正常启用评论,需要编辑主题在 /source/plugins/comment/halo-comment.min.js 文件中修改 {baseUrl:"https://blog.7wate.com/"} 双引号内的地址为你的博客地址。

为了适配主题风格,Fork 了官方仓库的评论组件。

组件仓库:7Wate/halo-comment-normhalo-theme-Redemptional

图库设置

  • 自定义是否显示图库。
  • 自定义图库页面标题以及短语。

许可证

GPL-v3.0 协议开源,请遵守开源协议。

来源:Halo 主题 Redemption 首发版 - 7Wate‘s blog;非商业引用,著作权归作者所有。

· 阅读需 2 分钟

上学的时候我特别喜欢数理化这些科目,因为这些科目对就是对、错就是错,然而文史类科目需要你 get 到它的点,然后由老师主观的评分;所以我当时偏科极其严重。

生活中也是如此,青少年时代的叛逆、懵懂无知、无畏无惧。固执偏见只坚信自己的“道”,并认为其他都是错的,淋漓尽致的展现着年轻人的棱角。后来的碰壁让我开始思考,并且深刻认识到非黑即白之间还存在无尽的灰色地带。

我停留在这个黑白灰认知很久,以至于深深的认为并不存在所谓的白。一叶障目不见泰山,当我们认定一件事情的时候,我们的思想就会变得很片面。

步入社会以后,随着阅历的增长加上生活的锻炼,开始慢慢的认识并打破了这个观点。生活不仅只有黑白灰,其充斥着各式各样的色彩,更夹杂着无数的中间地带。其没有所谓的标准答案,更没有非黑即白。

唯一能做的就是做一个不那么错的选择,仅此而已。

· 阅读需 4 分钟
Seven Wate

罪恶应该被遗传吗?这个标题还是源自看到的两个视频《四天工作制》、《为什么德国年轻人选择不上大学,直接去工作?》,进而延伸出来的思考。

英国作为老牌强国,曾更是被称为日不落帝国;作为世界上第一个工业革命和工业化的国家,西方资本主义的倡导者,并且是早期议会民主制的诞生地。但在资本主义原始积累阶段它也是罪恶累累,现如今作为发达国家,其国民更是享受发达国家带来的高福利,德国更是如此,那么它们曾经所作下的罪恶应该被遗传吗?

日本于上个世纪对我国进行侵略战争,两千万人的抛头颅洒热血赶走了侵略者。那么现在日本(人)应该遗传曾经所犯下的罪恶吗?清朝闭关锁国是直接导致近现代中国的侵略原因之一,那么现代的中国人就需要承担这些侵略带来的血与泪吗?

小时候村里有很多大沙岗,村里的老书记也是趁着建筑行业的高速发展,私自将全村的公共财产变卖发家;其子孙后代也是享受充分的物质基础所带来的便利,拥有常人所难得的资源与机遇。那么老支书的子孙后代应该遗传他曾经所犯下的罪恶吗?

人类作为智慧动物的一支,站在动物金字塔顶端,期间更是充满了原罪与杀戮;那么其后代应该遗传所犯下的罪恶么?如果动物就因为它母亲是猪,那么它生下来就应该承受将来被吃吗?

就这个问题也与朋友展开了辩论,问题的中线在于遗传;父母给予孩子生命,那么孩子应该遗传父母曾经所犯下的恶么?最后所得的结论是:

客观上:如果孩子享受父母曾犯下的恶所带来的利益,那么孩子是必须要遗传或者继承这份所谓的恶。

但是进而又存在的问题可以推翻这个结论,孩子生下来作为独立个体有选择的权力吗?如果父母就是想通过自己曾犯下的恶让自己的孩子获得利益呢?就如动物生下来是猪,小猪仔说它不想被吃,我能重新投胎吗?很明显这是不能的,也是做不到的。

综上所述,最后还需要再加一条简单粗暴的结论:强者拥有最终解释权,因为我得拳头比你大,所以我的规矩就是规矩。可是我以为我以为的就是我以为的吗?

· 阅读需 6 分钟
Seven Wate

一直以来对大西北都拥有莫名的向往,更是憧憬有朝一日漫步在青海湖。在十一假期的第二天晚上,去打球的路上莫名的想去青海湖。

叔、突然那么一瞬间,咱去青海湖吧?

速度回电话,明天去!

就这样,第二天四个成年人加三个小孩出发了,来了一场自由与热爱的旅行……

一路吃着火锅唱着歌,仿佛自从坐上车那刻已经踏入青海湖了。

导航地图

而且而且,最最最 BT 的事是什么?临出发的时候,旭鹏要骑摩托去,我们都觉得是开玩笑了;我日哦,直接拿着头盔就下楼了……手套也不带,骑行服也不带,总之就是头铁。

毕竟莎士比亚曾经说过:不气盛还叫年轻人么?

聚团吃泡面

疯狂疾驰上千公里后,即将进入甘肃境内;我们在宝鸡服务区稍作歇息,吃着泡面聊着有的没的,此时我们还没意识到角落的大白才是最后的王者。此时旭鹏依旧兴致不减,打算一路干到青海湖;很显然他也没意识到有什么在等着他🐶。

休整好再出发已经是后半夜了,下起了大雨;雨刷器都刮不及的大雨,路上也没有一辆车了。我俩都在心疼旭鹏,这会不会吃席啊哈哈哈,更是一致认定他这辈子是忘不了这次骑行了!!!

<video controls style="width:100%;"><source src="https://static.7wate.com/img/2022/10/10/61949924fde73.mp4" type="video/mp4">您的浏览器不支持 HTML5 视频,请下载Chrome或者Edge浏览器。</video>

原谅我笑得这么没心没肺哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈。

没有办法,自己选择的路哭着也要走完;后续加把劲可算一路干到了西宁。临近青海湖,虽然天气很差很差;但是结合以往的经历,更期待成为欧皇!!!

风景照

风景照

风景照

我们这里暂时不让下高速,请你前往 XXX 高速口下高速!

啊哈,疫情防控办发布的通告,符合规定允许下高速啊。

抱歉,我们这里禁止下高速,请你自行折返!

……

我日哦,就是 TM 这么戏剧化;我们奔袭了 1700km,临近青海湖 15km,禁止下高速。

简单来说,当地省市疫情防控办发布的公告:符合规定可以下高速;当地卡口工作人员无任何正当理由禁止下高速……我们不死心,继续折腾。在折腾了近 4 个小时后,无能为力、无可奈何、无无无,总之就是说破天就不让你下!(但是 TM 的当地有关系的人,你就可以随便下!)

考虑人生地不熟加上无水无粮食,纵有万般不舍也只能原地折返。

<video controls style="width:100%;"><source src="https://static.7wate.com/img/2022/10/10/5c6f5846c43cb.mp4" type="video/mp4">您的浏览器不支持 HTML5 视频,请下载Chrome或者Edge浏览器。</video>

Fuck

就这样,Fuck!!!

我还能有什么好说的呢,来日方长罢了。

最后的最后虽然有时候,我们去经历一件美好的事、尝试做好一件美好的事;哪怕我们竭尽所能,也总是事与愿违。但是终究无论如何,我们终应该死在这自由和热爱里!