跳到主要内容

· 阅读需 6 分钟
Seven Wate

这篇关于 Obsidian 是生产力工具的终篇了,因为目前涉及 Obsidian 的文章特别多,所以我就不啰里啰唆叙述重复的文字了。本文主要涉及到 Obsidian 和 Docusaurus 如何进行有机的结合。

Obsidian

screenshot-1.0-hero-combo

Obsidian is a powerful and extensible knowledge base that works on top of your local folder of plain text files.

Obsidian 是一款基于本地文件夹保存的 Markdown 文件的强大知识库,旨在打造你的第二大脑!简单来说 Obsidian 提供的功能和语雀、有道笔记等笔记软件的核心功能都是一致的,但是 Obsidian 作为一款开源产品,其插件系统提供了丰富的功能和可拓展性。

Obsidian 的正式 1.0.0 版本于 2022 年 10 月 13 日正式发布。Obsidian 虽然作为一款很新的产品,但是却拥有一众信徒。Google 上关于 Obsidian 的搜索词条高达 2000w 条,同时各种各样的入门教程更是层出不穷。

在此主要介绍几个我认为特别好用的插件:模板、 日记、Git、XMind 思维导图。每个人对于 Obsidian 的需求和用法大同小异,但终归都是为了高效的记录笔记,切勿折腾本末倒置。适合自己的就是最好的!

模板

Obsidian 核心插件提供了基础的模板,第三方市场也提供了功能更加丰富的模板插件。模板插件对于文章的元信息,日记的固定模板、周报的固定模板、知识文章的快速生成提供了便捷,同时提高了效率。

文章元信息

title: 谈谈我的「数字文具盒」 - Obsidian
description: 谈谈我的「数字文具盒」 - Obsidian
keywords:
- 数字文具盒
- 生产力工具
tags:
- 数字文具盒
authors:
- 7Wate
date: 2022-11-30

日记模板

# <% tp.date.now() %>

## Info

| Date | Weather | Moon |
| -------------- | ------------ | ---- |
| <% tp.date.now("ddd HH:mm") %> | <% tp.web.daily_weather("郑州","zh") %> | <% tp.web.daily_weather("郑州","zh","?format=%m") %> |

## Daily

<% tp.web.daily_poetry() %>


## Habits

- [ ] 早睡早起 🌃
- [ ] 健康饮食 🥗
- [ ] 多喝热水 ☕️
- [ ] 保持运动 💪

## To-do List

- [ ] 阅读资讯 📺
- [ ] 每日必做 ✨
- [ ] 今日读书 📖
- [ ] 今日计划 ✏
- [ ] 今日分享 📌

## Notes

Markdown 文件不同于其他 Word、语雀等提供了元信息,所以这里需要手动维护便于查阅和展示。子弹笔记也可以通过日记模板快速实现,不必拘泥于种种繁琐的细节。我使用 Obsidian 的模板功能主要是方便和 Docusaurus 进行有机的结合。

日记

note

日记功能则是由 Calendar、Periodic Notes、Templater 共同组合实现的。简单来说就是通过 Calendar 插件(右侧日历)点击任意一天,即可通过 Periodic Notes 快速创建至对应文件夹并且生成文件名,然后 Templater 模板插件快速生成今日信息(自定义模板),最后简单写下今日总结即可实现一份完美的日报。

Git

Obsidian 提供了多种同步插件,但是作为一个 Coder,我还是喜欢 Git。

image-20221212212342409

XMind 思维导图

Obsidian 的 XMind 思维导图插件在写完文章后可以快速生成思维导图。

image-20221212212710645

Docusaurus

Docusaurus

Docusaurus 是 Facebook 的一款开源产品,Docusaurus 能够帮助你快速创建并发布美观的文档网站。因为 Obsidian 的开源版本不提供 web 展示,所以我借助 Docusaurus 实现了知识库的 web 展示。

平时在 Obsidian 客户端的帮助下,我可以随时随地快速的记录知识。Obsidian 提供的 Git 插件,方便我同步到远程 Git 仓库,最后使用 Github 等第三方服务进行自动构建部署。

在工作学习中,打造个人的 wiki 知识库是必不可少的,其在经过不断的积累后可以产生质的变化。总的来说 Obsidian 和 Docusaurus 并不是每个人的最优选,我前期刚开始使用的时候也是好一顿折腾,经历了一段时间的使用后才慢慢形成生产力。

结语

字数

至此生产力工具篇结束,整个「数字文具盒」系列也算进入了终篇。目前还有两篇文章,关于心得体会和网络环境的。希望这 2w 字的「数字文具盒」对你有所启发和帮助!

· 阅读需 4 分钟
Seven Wate

谈谈我的「数字文具盒」系列文章更多的是作为指南针,总的来说并不全面也不包含具体的操作细节,我的「数字文具盒」核心指导思想:适合自己的才是最好的、数据自主权、提高效率切勿折腾。

适合自己的才是最好的

你也许在用语雀、有道、Notion 等各式各样的生产力工具,已经形成了生产力,务必坚信适合自己的才是最好的。「数字文具盒」系列文章更多的是我对生产力工具的经验之谈,不存在普遍适用性。我的初衷是「数字文具盒」系列文章可以拓宽你生产力工具的边界,如果你刚好需要从零打造生产力工具,当然最好不过。

切勿纸上谈兵,猴子下山。打造生产力工具一定要结合实际需求出发,更不要盲目创造需求。就如同书买了是要读的、读的时候是要思考的、最后的时候是需要总结升华的;并不是买了书,知识就到脑子里了。生产力工具的打造更是如此,在满足基本需求的情况下,不断使用、提炼总结、反复实践,一步一个脚印、层层递进才可以打造出适合自己的生产力工具。

数据自主权

互联网精神:开放、平等、协作、快速、共享 ,它更是互联网生命力之所在。因为现在的互联网科技公司商业行为一味的跑马圈地,不断的吸食互联网的血液。虽然我崇尚极致的自由,尊重 GUN 计划;但是不可否认商业公司是互联网发展中的极为重要的推动者。所以综上所述,我更愿意掌握数据自主权,同时和互联网科技公司业务进行有机的结合。

例如我私有化部署的 Gitea 可以同时使用 Github、GitLab、Cloudflare 进行自动备份、持续集成、持续部署等。静态网站更是利用腾讯云的活动一直免费使用,CDN 等更是羊毛都薅秃噜皮了。最后这所有的数据完全掌握在自己的手中,who 怕 who 哈哈哈 ~

提高效率切勿折腾

不忘初心,方得始终;初心易得,始终难守。我也见过很多很多很多博友在折腾工具的路上一去不复返了,似乎忘了最初的本意,完全沉浸在折腾的乐趣里了。并不是要论个谁对谁错,我其实也非常喜欢折腾,真的嘎嘎快乐 ~

因为我对于「数字文具盒」的定义就是为了提高学习、工作效率,并以结果为导向,以实现需求为目标的。所以如果你打造「数字文具盒」是为了提高效率,那么就切勿折腾;如果是为了快乐,那就好好折腾 ~

· 阅读需 17 分钟
Seven Wate

下文接着生产力工具继续说起,主要涉及到一些非常好用、事半功倍的工具!

思维脑图

思维导图(mind map)是一种用图像整理信息的图解。它用一个中央关键词或想法以辐射线形连接所有的代表字词、想法、任务或其它关联项目。它可以利用不同的方式去表现人们的想法,如引题式、可见形象化式、建构系统式和分类式。它普遍地用作在研究、组织、解决问题和政策制定中。

思维脑图是工作生活中梳理、划分、具象化问题中必不可少的方法论。在思维脑图的基础上,我又进一步划分了分支型和流向型的思维脑图。

  • 分支型:常见的思维脑图,从巨到细一层一层划分梳理。
  • 流向型:流程、分支预测图,推演问题的可能性和结果走向。

Xmind

Xmind

Xmind 是一款全功能的思维导图和头脑风暴软件。Xmind 可以快速整理思绪、延展思维、结构化呈现想法;同时结合多种思考方式,快速的提炼思维要点。其像大脑的瑞士军刀一般,助你理清思路,捕捉创意。

Xmind 平时我用的最多的一款工具了,简直太好用;整理思绪、提炼要点的一把好手。虽然有很多的开源项目可以实现 Xmind 的大部分功能,但是我真的是用习惯了,所以没有搭建私有的工具。

excalidraw

excalidraw

excalidraw 是一个开源 web 项目,主要用于素描手绘图的虚拟白板。excalidraw 不仅拥有基础的白板功能,还拥有丰富的第三方形状库,同时还可以多方协作绘画。

Github 类似于 excalidraw 的开源项目有很多,功能也都大同小异,我就是选了一个自己喜欢的。自己部署 excalidraw 工具服务无法在线协同绘画,excalidraw 官网提供此服务。

数据统计

数据统计只是自己平时想满足一下虚荣心,看看有多少读者浏览博客。网络上很多大厂都提供数据统计,例如谷歌、百度等等,在这里我使用的是 Umami。

Umami 是一款简单、快速、注重隐私的数据统计(Google Analytics)替代品。其通过一行 JS 代码就可以实现网络大部分的数据行为统计,而且拥有美观的 UI 设计。

intro

静态文件

静态文件主要涉及到多平台易用、方便管理备份。例如博客的图片资源、维基的 xmind 脑图资源、视频资源,虽然都提供的有附件管理功能,但是谁能保证未来不会更换博客,更换网站呢?我在这里的解决方案就是搭建一个静态文件管理系统,负责所有的静态文件分类、归纳处理。

兰空图床

兰空图床

LskyPro 是一款开源 web 图床管理系统,其采用 Laravel 框架开发使系统拥有稳定、高效和安全性。LskyPro 现在拥有开源 1.x、2.x 和商业版,这种选择也许是开源最好的方向。我主要使用开源版本,更新了 2.x 以后我也尝试了新的版本。但是总的来说 1.x 可以很完美的满足我的需求,因为我不仅仅只管理图片,还需要视频、文档等等,所以 2.x 不能便捷自定义文件后缀就不是我的菜!

我利用 LskyPro 管理静态资源的具体方法是通过 LskyPro 进行分类归纳存储,挂载腾讯云对象存储策略,再使用 CDN 自定义域名转发,既保证了速度又固定了静态资源的唯一 url 链接。

密码管理

密码管理器是一类用于生成、检索、保存及管理复杂密码、数字签名的措施,可以由硬件或软件实现。复杂密码的生成一般按需要以随机算法产生,而密码资料则保存于一个以密码、数字签名等方式加密的数据库内。它的作用类似于钥匙圈,方便个人或企业组织集中管理密码、数字签名等身份管理要素。

如今常见的密码管理器有三类:

  • 本机安装并在本机访问的应用程序(如 KeePass)
  • 在线服务,通常经网站访问(如客户端、网络应用程序等)
  • 经本机访问的外挂硬件设备,如 U盾、FIDO 等 USB Key。

它们的主要区别是保存密码及数字签名的加密数据库是保存在本机使用的,还是保存在在线存储服务的,还是保存在特定存储设备的。一些密码管理器,如GNOME 钥匙圈、钥匙串、大部分浏览器内置的密码窗体存储功能等,既可在本机访问,也可在用户经过设置以后能使用在线存储服务的。一般密码管理器会要求用户至少需要一个主控密码来解锁经过该主控密码加密的存有账号密码信息的数据库。

密码管理器这个范畴太大了,我平时用的最多的就是管理各个网站的密码,登录的时候一键填充密码服务。现在国外成立的 FIDO(Fast IDentity Online)联盟,其宗旨是为解决强制认证设备的交互性和用户面临大量复杂的用户名和密码。我比较看好 FIDO,也许这就是以后密码管理的最终解决方案。

Bitwarden

apps-combo-logo

Bitwarden 是一款自由且开源的密码管理服务,用户可在加密的保管库中存储敏感信息(例如网站登录凭据)。Bitwarden 平台提供有多种客户端应用程序,包括网页用户界面、桌面应用,浏览器扩展、移动应用以及命令行界面。Bitwarden 提供云端托管服务,并支持自行部署解决方案。

Bitwarden 除了拥有基础且丰富的密码管理功能,同时支持自动填写登录信息、用户名,密码生成器、2FA 验证、数据泄露报告、跨平台客户端、支持私有部署等其他优点。Bitwarden 真的是密码管理器的一大杀手,但是官方提供的私有部署系统资源消耗较大。这时 vaultwarden 便闪亮登场,vaultwarden 是Bitwarden 的完美复刻版,但是资源占用更少更易于部署。Dokcer run 一下就完成了服务搭建,真的嘎嘎好用、嘎嘎香呀!

浏览器的密码管理器好用么?

只要是密码管理器都好用! 如果你使用了密码管理器,我相信在绝大多数密码填充场景上省去了不少麻烦事情。现在 Chrome、FireFox 等都提供了基础的密码管理功能,但是相对来说功能不健全,密码安全得不到保证。

还有其他的密码管理器么?

密码管理器真的是多如牛毛了,形式各样的都有。 谷歌检索一下关键字,各式各样的都有,没有最好的密码管理器,只有最适合你的密码管理器。

邮箱服务

电子邮件(electronic mail),简称电邮(email、e-mail),是指一种由寄件人将数字信息发送给一个人或多个人的信息交换方式,一般会通过互联网或其他电脑网络进行书写、发送和接收信件,目的是达成发信人和收信人之间的信息交互。

《互联网周刊》报道认为:“1969 年 10 月,世界上的第一封电子邮件是由计算机科学家 Leonard K. 教授发给他的同事的一条简短消息。”

电子邮件广为商业界使用,是第一个广域的电子介质,也是商业通信的第一次“e化革命”。电子邮件发送信息方便、不需要同步进行,但是随着邮件越来越多,垃圾邮件、信息重载等等也令人苦恼。

我个人非常喜欢邮件进行工作沟通,首先相对于即时通讯,邮件不需要秒回,沟通起来更省劲、效率更高。但是大环境,似乎并没人喜欢邮件沟通,更喜欢秒回……本来也是打算自建邮箱服务器,但是权衡之后还是选择了第三方服务。主要原因如下:

  • 云服务商对邮箱端口的封禁
  • 可能会遭受莫名奇妙的封禁
  • 可能会被主流邮箱拉黑

最主要的原因是因为现在邮箱服务的滥用,导致人人自危;所以我最终使用了腾讯企业邮箱。虽然注册绑定的时候麻烦一些,但是可以在微信收到通知、同时拥有相对的自由权、也不会那么容易被拉黑,故此我最终没有选择自建邮箱服务!

那个邮箱服务更好?

根据自己实际需求来,满足你的需求就是最好的。 现在各个邮箱服务商都提供了各具特色的第三方服务,喜欢那个用哪个。

版本控制

在 21 世纪,如果计算机界没有了版本控制就如同西方失去了耶路撒冷! 版本控制是用来跟踪、记录、维护、回溯工程的重要工具,确保由不同的人共同协作的工程从诞生到定案的过程记录下来。

我相信版本控制的概念很多人都已经接触了,例如大名鼎鼎的 Git,SVN 等。社区托管服务中 Github、GitLab 也都耳熟能详,这里主要介绍一下 GiteaGogs

Gitea

screenshot

Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go编写,采用 MIT 许可证;Gitea 是从 Gogs 分支过来的,其主要优点开源、易于安装、跨平台、轻量级运行。

Git 社区托管不好用么?

社区托管非常好用,但我在意数据自由。 因为社区托管说封了你账户可能那天就封了,不让你访问就没有一点办法了;所以自建 Gitea 就是我拥有对数据的绝对控制权,我可以选择性的同步到社区托管做备份。

运维工具

运维工具的主要目的就是舍弃第三方的 Shell 工具,同时更便于服务器的运营维护。很多人用不到,所以主要介绍两个运维工具:SpugJumpServer

Spug

Spug

Spug 是一款灵活、强大、易用的开源运维平台,其面向中小型企业设计的轻量级无Agent的自动化运维平台,主要支持批量执行命令、文件管理、计划任务、发布部署、配置、监控、报警等综合一体化运维服务。

平时我有一些小主机都会使用 Spug 来进行统一的管理,挺方便的。Spug 相对于 JumpServer 的主要优点就是性能要求不高,可以跑在小主机上。JumpServer 专业程度更高,Github 更是 19.5K 的星星,真的是让人流口水 ~

JumpServer

JumpServer

JumpServer 是广受欢迎的开源堡垒机,是符合 4A 规范的专业运维安全审计系统。JumpServer 的特色优势是开源、分布式、无插件、多租户、多云、审计、多应用支持。

企业级运维使用 JumpServer 的更多,提供的性能更强大。我在本地管理虚拟化主机也在使用 JumpServer,但是云服务器孱弱的性能还是不要折腾了。

CI/CD

CI/CD 这个敞开嗓子聊怕是要说个三天三夜,爱你不停歇了~ 如果不做 DevOps 的话,很少会用到 CI/CD。目前我专业知识还达不到输出的程度,所以就不误导人了。

目前我在使用 Jenkins 进行持续集成和持续部署,Github Action 等其他 CD/CD 工具也很好用,根据自己实际需求来,需要哪个用哪个就好啦 ~

引用

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

来源:Xmind思维导图 | Xmind中文官方网站;仅学术引用,著作权归作者所有。

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

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

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

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

· 阅读需 14 分钟
Seven Wate

万丈高楼平地起,只有打好地基才能更好的实现数字文具盒。传统意义上的基础设施主要是公路、电网、供水等设施;数字基建则是互联网、数据中心等数字化设施。本文的数字基建主要是:云服务器 + 域名。

云服务器

云服务器(Cloud Virtual Machine,CVM) 提供安全可靠的弹性计算服务。 可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。现如今已经并不需要去购买物理服务器,然后拉根网线连上网来实现数字基建了。云计算的发展带来效率的提升,仅需在服务商买一台足够用的服务器,就也、不用担心停电,断网,硬件损坏等边际成本了。

例如腾讯云、阿里云等等在活动打折的时候,低廉的价格就可以拥有一台个人云服务器。结合实际的国情,云服务器除了性能上的差距,还存在如下的问题:

境内服务器境外服务器
带宽较高
网络无法访问境外无法访问境内
速度速度快无法保证
备案支持不支持
域名备案才可以正常访问无限制

综合来说境内服务器优点:速度快,支持域名备案。境外服务器优点:免备案,访问网站。当然并不存在境内差不值的,境外好买买买的,两者也是有很多坑的。

云服务器什么配置更适合我?

根据实际需求和钱包。 我这次购买的服务器,实现所有需求日常内存占用 70%,留下了一定的冗余量保证突发情况。一般情况下,云服务器处理器闲置率较高,内存则为重要指标,网络带宽则体现在访问、下载速度上。

内存容量适用场景
1GB博客、静态网站、迷你论坛。
2GBNextCloud、RssHub、Gitea、Docker 等。
4GB 及以上常见生产力工具、论坛等等。

如何区分境内、境外服务器?

无论是境内还是境外服务器,首先必须要明白一点:不能触犯云服务商「商业执照」所在地的法律条规。 如果服务商隶属于中国,例如阿里云、腾讯云。哪怕你买的云服务器在美国、欧盟也必须遵守中国法律;同样如果你买的美国服务商的服务器就必须遵守美国法律。

根据《互联网信息服务管理办法》第十五条,互联网信息服务提供者不得制作、复制、发布、传播含有下列内容的信息:
(一)反对宪法所确定的基本原则的。
(二)危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一的。
(三)损害国家荣誉和利益的。
(四)煽动民族仇恨、民族歧视,破坏民族团结的。
(五)破坏国家宗教政策,宣扬邪教和封建迷信的。
(六)散布谣言,扰乱社会秩序,破坏社会稳定的。
(七)散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的。
(八)侮辱或者诽谤他人,侵害他人合法权益的。
(九)含有法律、行政法规禁止的其他内容的。

例如我买的腾讯云 - 硅谷云服务器,虽然是境外物理服务器,但还是不能违反中国法律条规所不允许的事情,违规擦边依然会面临无条件封禁。务必结合实际需求来购买,避免买了境内服务器又想要境外服务器的优点。如果有额外的需求,请务必花一点钱转移风险,而不是头铁试试会不会被封。

境内 / 境外云服务器买哪个?

非必要需求,建议买国外。 云服务器相同配置情况下,境内境外服务器性能无明显差距,主要还是网络访问。境内云服务器访问一些网站,例如 github,dockerhub 等等太慢了,甚至是无法访问。并且可能会因为网络问题产生各种意外的错误。国外服务器还可以免备案域名绑定,同时带宽也相对较高,实际体验速度也不比国内慢太夸张。

我的上一台腾讯云 - 上海云服务器 ping 值 50 左右,现在的这台腾讯云 - 硅谷云服务器 200 左右,实际应用体验基本无感。但是国外服务器不支持备案,所以务必注意这点。

那个云服务厂商比较好用?

优先买大厂的云服务,然后买优惠享折扣。例如常见的境内:腾讯云、阿里云、华为云等等,境外的:亚马逊云、搬瓦工等等太多了。我用了大概 5 年左右腾讯云的服务器,目前整体来说腾讯云对个人还是不错的,暂时并未遇到太大问题。

如果你有经常蹲折扣,例如双11,黑色星期五,那么一定是真香定律。例如我这次升级云服务器则是蹲到了腾讯云 - 轻量云两周年活动。仅花费了 1400 元左右,购买了 7 年的 2 核心 4GB 的云服务器。

群晖、树莓派会不会更省钱、更好用?

不一定、看情况。 如果你有家庭数据中心的需求,那么群晖、树莓派等会更好的满足你的需求。但就大部分情况来说,建议购买云服务器。因为家庭数据中心太折腾、太折腾、太折腾,需要无法计量的时间精力和成本。

家庭数据中心云服务器
网络速度快、不稳定速度慢、稳定(可弹性升级)
存储容量大容量小(可弹性升级)
性能高性能低性能(可弹性升级)
电费0.5元 - 10元
费用同性能价格低同性能价格高
运维边际成本极高

两者单就电费来说,家庭数据中心设备挂 4 块硬盘,综合功耗 50w。一天 5 毛钱的电费,7 年就是 1277.5 元。我的服务器 7 年也才 1400 元,并且免维护。如果家里意外停电了,硬盘还可能会挂。硬盘如果组件了阵列模式,阵列重组也需要时间,而且存在失败几率。网络更是不用提了,国内很少能有个人用户享受完美的固定 IP 地址,商业带宽更是费用爆炸。

当然家庭数据中心并不是一无是处,它在网络、存储、性能方面可以秒杀云服务器。家庭数据中心动辄上 T 的数据存储容量,8 核心的处理器和 16GB 的运行内存是云服务器所不能的。想必折腾家庭数据中心的应该不会看我这篇文章。🤣🤣🤣

域名

网域名称(Domain Name,Domain),简称域名、网域,是由一串用点分隔的字符组成的互联网上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。域名可以说是一个 IP 地址的代称,目的是为了便于记忆后者。例如,wikipedia.org 是一个域名。人们可以直接访问 wikipedia.org 来代替 IP 地址,然后域名系统(DNS)就会将它转化成便于机器识别的 IP 地址。这样,人们只需要记忆 wikipedia.org 这一串带有特殊含义的字符,而不需要记忆没有含义的数字。

既然域名是为了方便记忆,那么就注册一些有意义、好记的域名,同时喜欢什么就注册什么 ~

免费域名好用么?

免费的往往是最贵的;如果你有云服务器就不要注册使用免费域名,例如 .xyz 后缀的域名一年也就十几块钱,所以务必不要注册使用免费域名。免费域名解析起来存在一定的不稳定性,同时那天可能就停止你的访问了,其次对 SEO 不太友好。

那个域名后缀好一些?

建议注册 .com、.org、.dev 等常用后缀。 因为域名是存在一定价值的,所以不要乱注册域名浪费钱。就注册这些大家常用的域名后缀。

国内域名好备案么?

看情况,而且一些域名无法备案。 例如 .org 域名无法在国内备案,所以如果你想要备案,务必清楚那些域名可以备案。而且备案成功后,并不意味着可以一劳永逸了。工信部门会随机抽查,如果你是幸运儿又得折腾啦。域名备案时间大概需要 10 - 20 天左右,国内的云服务商都会协助你一起备案的,整体难度一般

中国互联网域名体系:https://domain.miit.gov.cn/

域名续费多久的好?

域名续费 8 年时间最好。 活动的时候会有折扣,然后就想着直接续费 10 年。在此忠告尽量不要续费 10 年,因为如果未来有转移域名的需求,你可能就要等一年或者两年才可以了。因为转移域名大部分情况必须在域名接收服务商再续费一年,所以域名续费 8 年时间最好。

哪里购买域名有优惠?

谷歌域名购买选择土耳其地区付款。 我买了 8 年 org 域名,仅仅花费 200+,真的白捡似的。例如 .xyz 域名 10 年也才百十来块钱,所以冲啊!买垮谷歌域名!!!

谷歌域名地址:https://domains.google.com/

引用

来源:云服务器CVM云主机云计算服务器_弹性云服务器- 腾讯云;仅学术引用,著作权归作者所有。

来源:政策与规范 违规信息类型说明-腾讯云安全违规处理-文档中心-腾讯云;仅学术引用,著作权归作者所有。

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

· 阅读需 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 样式库越来越多了,网页效果越来越优美了,同时也变得臃肿了起来。不过只要网速快,优化个毛线!奥里给!!!