普通视图

发现新文章,点击刷新页面。
昨天以前首页

重用RSS阅读

作者 Juby
2024年11月15日 23:30

过去的很长一段时间,从Feeder到Inoreader,我几乎已经放弃了RSS阅读。App虽放置在首页,却隔很久才打开一次,面对上百条更新,匆匆浏览几条,便标为全部已读,形同未读。

我的订阅源不多,没有非读不可的内容,甚至没有太多值得读的内容。相反,我从聚合阅读又回到了直接访问。地铁通勤时,会打开卫报、纽约时报、经济学人和华盛顿邮报的网站,浏览首页新闻。

地铁通勤的时间太宝贵,大头是看书,只有一两站的空隙看新闻,或是在不想看书之时。日间的工作太忙,也是我太专注,不怎么看手机。晚饭时间及下班后,更多耽于娱乐,很少严肃阅读。看书,看新闻,末位的RSS阅读便无时间了。

最近看到Follow很火,以为是什么新东西,后来知道是RSS阅读器。打开网站发现需要邀请码,并无十分想尝试的念头,遂作罢。

RSSHub我是知道的,还部署过,学日语时写过两条路由抓取日语网站的文章。原来Follow是同一人的项目,便可以理解了。

Follow公测后也试用了,阅读界面没什么特殊的,有一点社交属性,看视频和图片倒是挺方便,集成了RSSHub的功能,可订阅的内容也多一点。不过公测账号有限制,也没移动端,当前还是不可用的。

Follow不可用,却让我的视线又回到了RSS。打开Inoreader网页,发现改版了,有种沧海桑田的感觉。清理了失效的、太久不更新的和没有全文输出的源,又找了一些新的源,借着再次回归的新鲜劲,尚可以日清。

平时更多用手机端,Inoreader在我看来有两个缺点,一是选中单词时无法像浏览器一样调用欧路查词,二是虽可看新闻,但热点大多是苹果及数码资讯类,不是我感兴趣的。

因此,看新闻的首选还是访问报刊网站,RSS订阅作为补充,另一个用处是看看网友的博客。

因为我是反感邀请制的(或许是自己没有邀请码的缘故?),等Follow放开订阅限制且有手机端,我会成为它的用户吗?图片看多了分心伤身,视频也不常看,目前看来是没有需求的,Inoreader够用了。

手机的通知、广告和隐私

作者 Juby
2024年11月10日 21:58

在讨论手机的话题下面,经常看到的关注点有通知推送、广告和隐私。作为一个手机的小众使用者,这三点对我都不构成困扰。

我没有推送通知的需求,而是会关闭所有应用的通知,除了微信,因为要收女友的消息。

以前买到手机会ROOT以便卸载系统应用(我有强迫症),或干脆刷成LineageOS。现在使用的一加Ace竞速版没有ROOT,只是禁用了大部分无权限卸载的系统应用。我没有使用任何一个ColorOS的个性化功能,只在安装应用时看到过一次广告,取消后再也未见过系统广告。

此外,我只装了两个有开屏广告的应用(招商银行和同花顺),使用频率也不高,对跳过此类广告的需求并不是很迫切。

其实在注册完各种账号之后,部分隐私便没了。至于系统层面的保护,我并不是很懂,姑且就按网上的观点,苹果手机做的更好。但我买不起苹果(Android旗舰也买不起),在这一点上无能为力。

有一段时间我很执迷于隐私防护,存储、邮箱、聊天等俱更换为偏向隐私的加密服务,但最终还是败给金钱,选择了更便宜的服务。我觉得自己陷入了迷途,若要真的保护隐私,最好是不上网,连手机都不要有。

这怎么可能呢?没有完美的解决方案,只能在有限的范围内做点防护。只在必要时安装国内应用,用完即删。应用权限单次授权,用完即禁。能用手机浏览器做到的事不下载应用。尽可能使用开源应用。无必要不注册,能用Google Voice注册最好。

这些都是杯水车薪,现实可能如1984那样,官方早就为我们立好了档案。有的人匍匐前行,背负的档案纹丝不动,而有的人挺直腰杆,档案滑落,终引起官方注意、招致审查。

两款垃圾耳机

作者 Juby
2024年11月8日 23:32

NANK Runner Pro4S

  • 购买时间:2023-03-13
  • 价格:1178

发烧时购买的运动装备。有次参加车店的团骑,看到一个女生戴着骨传导耳机还挺酷的,冲动之下也想买一个。在南卡和韶音之间,选了一款最贵的旗舰产品,希望能带来好一点的体验。

但不得不说,骨传导耳机真是智商税产品,或仅限于特定的场景使用。比如部门的SE和TSE,不喜欢普通耳机堵塞耳朵的感觉,便天天戴着骨传导。在公园里跑步时,骨传导耳机也是很合适的选择。

骑车真的不太适合戴骨传导,音量开到最大,无风和畅的日子还能听到声音,一旦有风或骑车速度快起来,几乎什么都听不到。所以我现在骑车都不戴耳机,偶尔戴着,也只是作为一种装饰,实际上没有播放任何音乐。

南卡的这款耳机好像有16G的存储,可以当MP3用,但遇到无法播放的歌曲时,会卡在那里而不能自动跳过。

耳机虽买了一年多,使用的次数却不多,充电便充不上了。问客服说是充电线可能有问题,让我买根新的试试,买你妹。找了一个极为刁钻的角度,还需要填充纸片,才能勉强充上电。这磁吸充电的做工,比起Garmin差太远了,质量堪忧。

这款耳机宣称游泳时也可佩戴,我不游泳没有试过,对其质量不放心,洗澡时也没戴过。

有次在车店玩,碰到一个同样戴着骨传导耳机的哥们,问我你这耳机价格高效果应该很好吧,我说勉强听个响。听君一劝,骨传导耳机买个几百块钱的体验一下即可,真没必要买旗舰款。

JBL T280TWS NC2

  • 购买时间:2023-08-19
  • 价格:398

七夕送给女友的礼物,因为之前买过JBL的蓝牙音箱,用起来没有不适,觉得这牌子还行才买的。

做工很差,一股廉价的塑料感。操作不友好,音量调节繁琐,点击反应迟缓。环境音模式下几乎什么都听不清,全是噪音。通话能力几乎没有,对方完全听不清。真不知是我不会用,抑或就是电子垃圾。以后绝对不会再买JBL的耳机。

无社交之必要

作者 Juby
2024年11月6日 23:24

罗德里(Rodrigo)荣获金球奖后,某些气急败坏的球迷(也可能是机器人账号)跑到德保罗、本坦库尔甚至罗德里戈的社交账号下发表恶评,闹出了笑话,因为罗德里本人并没有社交账号,而这几位躺枪的球员也叫Rodrigo/Rodrygo。

在如今的网络社会,一个人特别是名人没有社交账号是很难得的事,却也并非难事。我对于社交应用的使用,从甫接触网络时的好奇与兴奋,到如今的兴味索然,既是性格使然,也是兴趣转变。

人是社会性动物,任何时代都需要社交,只不过网络的发展让社交变得更容易、更广泛了。社交应用之必要,我概括为出于使用者的以下三个动机:公共参与、自我满足与营销。

公共参与,在我看来是以社交应用为平台,大众针对国家政策、社会治理、公共事件等诸方面发表意见建议或进行监督。这是我对微博的初印象,也是我中学时(至少要追溯到十四年以前了)想要注册一个微博帐号的初衷。彼时的微博似乎是可以自由发表意见的平台,虽然现在的微博仍可以“键政”,但铺天盖地的是娱乐至死和主旋律正能量。从第一个执政期开始微博对我就没有意义了,最后一个账号死于无意冲塔。

自我满足是人们使用社交应用最主要的动机,它涵盖的内容非常广泛。比如自我表达、展示和分享的需要,追星、获取咨询的需要,娱乐的需要,寻求认同、渴望被关注的需要,等等等等。

最后一种动机是营销或推广,它和自我满足的区别在于,营销最终是追求金钱利益的,而自我满足更多的是一种精神需要。如果有机会,我很愿意在社交平台上做一个营销者,肯定比领取固定薪水要自由吧,啊,自由。

从我对网络还不太了解时,便接触了很多社交产品。电子邮箱不太算是社交产品,我却喜欢尝试各种邮箱,从QQ、新浪、网易,到Hotmail、Gmail、Yahoo、校邮箱,然后是域名邮箱的各种方案(腾讯、Yandex、Tutanota、mailbox.org)、ProtonMail、Disroot,当前使用的则是Zoho域名邮箱。

大一时人人网是校民级应用,社交之必需,大二就被微信取代销声匿迹。也是在那时注册了Twitter,需要手机验证便给客服发邮件说自己是中国人,立刻便通过了。Instagram还没有被墙,大家也热烈地玩了一阵子。Facebook当然也注册了,还有Tumblr(尚没有那么多色情内容)、Path等,好像只要是一个没用过的产品便尝试一下。

在这些平台上发过什么样的内容呢,几乎不记得了,反正是表达欲和分享欲爆棚时鸡毛蒜皮之事,后来的某一个时间点觉得太幼稚,便尽数删除。至于关注的人和话题,也随着兴趣转移增增删删。

国内的短视频和小红书是什么时候兴起的,我完全没有印象,这时的我已对社交没有兴趣,或是停留在原先的平台上便足够了。前段时间倒是下载小红书玩了一两个月,实在没什么有营养的东西,最终卸载了。在我们的应用分类中,小红书其实归属于购物一类。

Mastodon注册了,Threads注册了,Bluesky也注册了,但都无法持续使用。如同再没有一款游戏会让我感兴趣,也没有一个社交应用能让我持续使用。不如彻底告别它们吧。

我有议政的需要吗?我有营销的需要吗?有是有,但不是此时。而自我满足的途径也多种多样。常逛的论坛无需注册和登录,浏览新闻直接访问网站或RSS,有想说的话写在自己的博客上。

虽非无痕,亦难有迹可循。我并不是在谈隐私,只是对当前的我来说,自得其乐,实无社交之必要。

体重和骑车数据上传Garmin

作者 Juby
2024年11月2日 14:02

使用Garmin Forerunner 245M已经快三年半了,当时为了记录跑步数据一冲动就买了,骑车时也当码表用。后来跑步少了,骑车也有了码表,它就用来看看时间、天气和心率,早上看看睡眠。

前段时间表带的卡扣断了,从网上买了一根便宜的表带替换。我对这个手表很满意,会继续用下去等它不能再用的那天,退役之后,下块手表还是买Garmin的。

Garmin记录了我的日常运动数据,便想把体重和骑车数据也整合在一起。我的码表是Bryton的(Garmin码表实在太贵了),数据可以同步Strava但不能连接Garmin,查了一下好像没有从Strava反向同步到Garmin的方案,只能采用手动方式上传数据了。

流程是这样的:

  1. 码表连接手机的Bryton Active同步数据;
  2. 在App上选择记录导出为Fit文件(之前的版本可以直接导出为.fit文件,更新版本后变成了.zip文件,还要再解压);
  3. 登录Gamin Connect网页版,选择上传数据,上传导出的.fit文件。

虽然有点麻烦,但总归是一个办法。在这里要夸一下Bryton的App,一开始非常简陋难用,经过几次更新后,终于变得流畅好用了,这家公司还是有心的。

称体重用的是同事送的小米体脂秤,可以在手机上安装Mi Scale Exporter这款应用,作者有详细的使用指导。称体重竟然也是一个不容易坚持的习惯,对减肥不上心后也就不上称了。

一直担心自己的血压,一度还想买个Garmin Index BPM,记录血压数据,不知是否好用。

DirectX 诊断工具 dxdiag 查看系统信息


DirectX 诊断工具(dxdiag)是 Windows 系统自带的一款实用工具,提供有关计算机硬件组件和 DirectX 设置的详细信息,这些对于运行多媒体应用程序至关重要。通过在“运行”对话框中输入“dxdiag”,用户可以查看系统的详细信息,例如显卡型号、音频设备配置和驱动程序信息。该工具尤其适合排查图形或音频问题,还可以用于验证系统规格,以确保与依赖 DirectX 技术的游戏或软件兼容。

在 Windows 上搜索并运行“dxdiag”以启动 DirectX 诊断工具。

dxdiag-command-windows DirectX 诊断工具 dxdiag 查看系统信息 Windows 操作系统 软件

Windows下运行dxdiag来查看系统信息

您可以看到以下用户界面:系统和显示。这台电脑是我现在用的笔记本:微软Surface Studio Laptop

dxdiag-directed-diagnostic-tool DirectX 诊断工具 dxdiag 查看系统信息 Windows 操作系统 软件

Windows下运行dxdiag来查看系统信息-包括了显卡声卡等

英文:Use DirectX Diagnostic Tool (dxdiag) to View System Information

Windows操作系统

本文一共 259 个汉字, 你数一下对不对.
DirectX 诊断工具 dxdiag 查看系统信息. (AMP 移动加速版本)

扫描二维码,分享本文到微信朋友圈
75a5a60b9cac61e5c8c71a96e17f2d9c DirectX 诊断工具 dxdiag 查看系统信息 Windows 操作系统 软件
The post DirectX 诊断工具 dxdiag 查看系统信息 first appeared on 小赖子的英国生活和资讯.

相关文章:

  1. 智能手机 HTC One M9 使用测评 虽然我对手机要求不高, 远远没有像追求VPS服务器一样, 但是怎么算来两年内换了四个手机, 先是三星 S4 用了一年多, 然后 Nokia Lumia 635 Windows Phone, 后来又是 BLU, 半年多前换了...
  2. 按揭贷款(房贷,车贷) 每月还贷计算器 去年给银行借了17万英镑 买了20万7500英镑的房子, 25年还清. 前2年是定率 Fix Rate 的合同 (年利率2.49%). 每个月大概是还 700多英镑. 有很多种还贷的计算方式, 定率/每月固定 是比较常用的. 简单来说就是 每个月交的钱是...
  3. 同一台服务器上多个WORDPRESS站点的一些设置可以移出去 我自从把所有网站都挪到一处VPS服务器上 就发现很多事情省事很多 可以同时管理多个网站 包括 WORDPRESS博客. 比如我有四个WORDPRESS博客 然后我就把通用的一些资料给移出去 移到 HTTP或者HTTPS都不能直接访问的文件夹里这样就更安全许多. 文件 wp-conn.php 存储了 相同的数据库资料. 1 2...
  4. LOGO 海龟作画 系列 一 之 给孩子最好的编程启蒙语言 – Logo Turtle Graphics – Series 1 – Best Introductory Programming for Kids I think the LOGO turtle graphic is the best introductory programming language for the kids....
  5. 整理过的 步步高多媒体学生电脑(软驱1号) 或者是 98 型学生电脑软件镜像目录 和 100 张 游戏镜像下载 大部分软件都可以在 步步高软驱1号或者是 98 型学生电脑上使用.软件镜像格式是未压缩的IMG格式,每张盘是 1440KB 因为仿真软驱可以有 0 – 99 张模拟软盘,但实际上步步高软驱并没有这么多, 所以很多盘里都放了比较常用的一些软件,有些重复, 本人最喜欢 0 号盘, 因为可以用来编程,一张盘就足够了....
  6. 国内现在的外卖真是又快又便宜 这次回国感触最深的就是国内的外卖。第一天去颐和园回到我姐家5-6点很累,不想出门,所以就在家点了外卖。手机微信小程序(美团)选了支付下单,半小时内就送到了。 一开门,就见外卖小哥的一只手把食物送了过来,人的正脸都没见到,外卖小哥转身就走,走太快在拐角处还差点滑倒了。 我姐说,现在平台算法优化很厉害,送晚了,平台会罚钱,所以外卖小哥争分夺秒一刻也不敢多逗留。 撇开外卖食物是否干净健康,中国现在的外卖真是又快又便宜,比如那天和我姐一起去北京的环球影城,在回家的路上(坐地铁7号钱坐一个小时到菜市口站),我姐快到家的时候点了两碗粥,到家一会儿就送到了,你猜多钱?也才19元。19元也就2英镑多一些,在英国都不够小费的。 在国内真是幸福,怪不得国内房子的厨房大多不大,我姐二环2居室,厨房真是一点点,只够一人进去的,两人在厨房就很挤了。我估计是国内(打工)人吃饭大多外卖/餐馆,一年下厨房的次数估计一个手就能数过来。 望京小腰-这店名取得真不错。 本文一共 398 个汉字, 你数一下对不对. 国内现在的外卖真是又快又便宜. (AMP 移动加速版本) 赞赏我的几个理由. ¥...
  7. 最便宜的 4G 手机上网方案 昨天搞了一个 Nokia Lumia 635 手机 然后 店员给了一个新的 Sim 卡,说是会把旧的号转到这个新卡上, 到今天早上还没有动静,于是我就再打电话,3的客服就查了一下让我重启手机. 原来的手机三星S3也重启了, 马上就没有信号了, 新手机重启后,屏幕左上角显示 4G 因为...
  8. 新的旅途 – 离别总是伤感的, 离开了一起创业的公司 2周前, 正式离开了一起创业的公司, 这公司是我博士毕业后的第一份正式工作, 待了8年多了, 离别总是伤感的. 我是9月初提的离职, 三个月 Notice Period, 最后的几周交接完工作确实没有什么压力了. 11月30号, 在公司最后一天, 公司有个习惯, 对于 Good...

用WinMerge进行文件夹比较时忽略git目录的方法

作者 大致
2024年9月30日 16:35

在选择比较目录目录的对话框上,点击左下方【Folder:filter/文件夹:过滤器】处的【Select…/选择】按钮,然后在【File Filters/文件过滤器】选项卡中选中【Ignore git】,确定,即可。
进入比较后,这一项也有办法解决。点击菜单【Tools/工具】->【Filters/过滤器】后,同样在【File Filters/文件过滤器】选项卡中选中【Ignore git】,确定,然后刷新重新比较,亦可。


  • (1):其实两周后的决赛李明又喂了一次屎,不过那场比赛不如这场有戏剧性。
  • (2):进第二个球的那个赖特后来在假A沈阳队踢过。
  • (3):饭店里并没有天津本地品牌“五星”
  • (4):章鱼
  • (5):海胆
  • (6):不像《侍魂》和《天外魔境》那样还需要把武器拾回来,而是每个人的武器都能飞去来。

微言雅语 @2024-05

作者 Jeff
2024年5月27日 22:27

✪ 链接

➀ 链接庄子的“有所待”指的是什么

原句是“夫知有所待而后当,其所待者,特未定也”,出处《逍遥游》,《庄子》首篇。

“有所待”,就是有所依赖、有所对待,是指人的某种愿望、要求的实现要受到一定主、客观条件的限制。所谓“无待”,即无所依赖,是指人的思想、行为不受某些条件的限制。

庄子认为,“有所待”是造成人生不能自由的根本原因,摆脱有待,达到无待,才能实现自由,即获得逍遥游,逍遥游也就是无待的自由境界。

节选原文:

虽然,有患。夫知有所待而后当,其所待者特未定也。庸讵知吾所谓天之非人乎?所谓人之非天乎?

译文:

虽然这样,还是存在忧患。人们的知识一定要有所依凭方才能认定是否恰当,而认识的对象却是不稳定的。怎么知道我所说的本于自然的东西不是出于人为呢,怎么知道我所说的人为的东西又不是出于自然呢?

-

➁ 链接在纯文本文件中生活|为纯文本博客辩护

文中谈及笔记文档的保存成本,对比富文本或笔记软件与纯文本的差异。在内容检索方面,纯文本的增量检索,也可以快速的定位。上万行的笔记,占用的磁盘空间非常低,执行效率很高。有逻辑的记录方法,在庞大的单文件中不一定会非常混乱。

纯文本文件目前个人遇到的问题就是移动端的编辑应用,及跨平台的同步上。iOS没有十分好的编辑应用。

-

➂ 链接深层习惯:WorkingMemory.txt(你从未听说过的最重要的生产力工具)

这个方案其实是纯文本的待办任务管理,对于纯文本而言,其记录的灵活度比常见 TODO 应用要灵活,随意按需分组和组合,只是欠缺提醒功能。但是这个方案目的在于记录和唤起任务记忆,在桌面保持打开,随时查阅随时记录。大部分没有使用任务管理应用的人,大同小异都是使用类似的方法来记录事情,或者在本子上。通过纯文本,如果使得每一天的新增或关闭的任务得到合理的显示,有合理的处理流程,是方案的重点。方案中使用 [ ] 作为一项任务的状态标识,和我另外一个方案十分接近。任务在一个文档中集中,一目了然,也有利于整体考虑和调整优先级。固定有效的记录方式,可以让脑袋清空,关注当前的工作。

-

➃ 链接Obsidian CEO 怎么使用 Obsidian (译文)

我会使用的文件夹:

附件:图片、音频、视频、PDF 等附件。

网页剪辑:用我的网络剪辑器捕获的由其他人编写的文章和网页。

每日记录:每日记录我的日常笔记,全部命名为 YYYY-MM-DD.md 。(火箭君注:我用 LogSeq 专门处理这类笔记)

各种引用:来自于 书籍、电影、地点、人物、播客等。

模板的模板:在我真正的「模板」文件夹嵌套在 Meta下,其中还包含我的个人风格指南和有关保管库的其他随机注释。

我不使用的文件夹:

Categories:类别文件夹 包含每个类别(例如书籍、电影、播客等)笔记的顶级概述。

Notes:笔记示例文件夹

我遵循的一些规则:

避免将内容拆分到多个保管库中。

避免使用文件夹进行组织。

避免非标准 Markdown。

始终利用类别和标签。

统一使用 YYYY-MM-DD 日期。

-

➄ 链接生活与工作的平衡

在孩子成长期间,不把工作带回家,非十分必要,不在晚上和周末工作,把时间留给陪伴家人和孩子。等孩子成年后,你回过头来,相信你不会后悔这个决定。


✪ 闪念

➀ 生活 | 了解并改进自己的弱点固然需要,但知道自己的优势,在合适的环境中并发挥到极致,或者投入产出比更高。就好像你十分积极的去精进自己的方方面面,但其成效不如专攻一个优势领域,其他方面合格即可。毕竟一个人的精力和时间都是有限的,需要有优先级和核心方向。

-
➁ 极简 | DONE LIST,设计一套完成清单,记录每天完成的事情。可以针对长期关注的事情加上 Project 标识。清单可以作为每日重要事项的记录,也可以对每天的完成事宜有个回顾,对自己的督办。
例子:

日期(标题)
连续序号-事项情况、遗留事项、个人感想 +项目名称(内容,多行)

-

➂ 效率 | 面对太多的电子邮件、太多的会议、太多的事情要做,我们应该选择做更少的事情,以不同的速度工作,专注于质量。


✪ 推荐

➀ 书籍《书店日记》 [英] 肖恩·白塞尔 / 顾真 / 广西师范大学出版社 / 2019-09

微言雅语 @2024-05-雅余

肖恩•白塞尔(Shaun Bythell)是苏格兰最大的二手书店、一家名叫“书店”的书店的店主,他也是威格敦图书节(Wigtown Book Festival)的组织者之一。《书店日记》是肖恩的第一部作品。

微言雅语 @2024-05-雅余
作者:肖恩·白塞尔

这是一本二手书店毒舌店主关于其开店经历的吐槽日记,吐槽顾客,吐槽店员,可能你会觉得有点水,但语言幽默犀利,绝不鸡汤,行文走心。肖恩让人相信,没有什么困境是英国人的幽默无法化解的。睡前拿起来随意读几段,还是挺舒心的,不费脑子,哈哈。作者是坐拥十万藏书的二手书商,每天守着书店等着故事上门。他还是电纸书坚决反对者,拿枪射击 Kindle 发泄不满。

我不是电纸书的反对者,毕竟电纸书真的提升了记笔记和整理的效率,但电纸书读起来的感觉还是差那么一点。如果你也是个书迷,不妨读读,这本书可以帮你打发一些碎片时间,舒缓一下精神。或者你也想开个书店,你可能会从中得到一些经验和了解现实的骨感。

纯文本生产力方案探讨

作者 Jeff
2024年5月15日 13:11

很多人会尝试利用手头有限的工具去解决日常生活、工作记录的需求,例如每日晨间日记、每日晚间小结、待办清单、完成清单、灵感速记、项目行动计划等等,或安装一些时髦的App,或直接使用记事本或者excel表格等常见软件。不少程序员利用其轻量开发工具(Sublime Text、Notepad、EditPlus等)同时完成了编码、日常记录和会议记录的诉求。借助 Markdown 语法,甚至可以作为你的超链接收藏夹管理。在纯文本生产力(Plaintext Productivity)的探索上,我分享下我的了解和方案。

探索这个方案的起因,是经历了当年印象笔记 5000+ 条笔记的迁移后,我已尽量远离云笔记,迁移成本太高了。所以现在无论笔记、日志、会议纪要和日记,都使用数据本地化的管理方式,并且文档格式永远不会过时的。

 

2008年 Daniel Lucraft 在其博客中分享了使用单个大文本文件(One Big Text File (OBTF))的利弊:

优点:1) 一切都在一个地方,2) 它很容易在计算机之间同步,3) 它可以在任何文本编辑器中使用,4) 格式永远不会过时。

缺点:1)必须严格地同步,2) 文件可能会变得非常大,3) 在一个大文件中较难找到东西,即使使用搜索,4) 想法可能会在所有其他项目中丢失。

他提出使用git进行版本管理,使用文件夹归类的方式把一个大文件进行拆分,单个文件中对于不同类型的记录内容进行堆栈式(模块化)等方法解决单个大文件的缺点。

但我不建议把纯文本文件拆分的太细,或分类到多个层级的文件夹中。尽量还是坚持一元笔记法的原则。

 

如何有效整理信息》中有关一元笔记法的三条原则:

1、一元化:所有信息都只记录在一个笔记本里/所有信息都只记录在一个文本文件里面;
2、时序化:所有信息按照时间顺序记录,把所有笔记按照日期编号,类似 YYMMDD 这样的 6 位编号/OBTF 里可以把日期标记为小标题;
3、索引化:让笔记能够通过某种规则被找到,提供寻找笔记的线索。

 

堆栈式(模块化)的区分方法其实很简单,每个部分使用明显的区分字符作为间隔。如:

______Inbox 收集箱
______ToDo List 待办清单
______Open Projects 进行中项目
______Done List 完成清单 + Daily 日记
______Close Projects 已完结项目

当任务或项目完成,则按时间倒序移动到对应的模块中。使用明显的区分字符式方便我们在搜索的时候可以快速的定位对应的位置。

 

Daniel Lucraft 在文中还分享了两个有趣的纯文本日历和日志的记录方式。

纯文本日历日记录方式:

以月为一组,每天一行文本记录当天的重要事情。保证每日的记录在一行内,控制字数

五月
2024-05-01 周三 | 启程去阿勒泰
2024-05-02 周四 |
2024-05-04 周六 | 约李娟一块吃饭庆祝
...
2024-05-31 周五 | 每日一记

六月
2024-06-01 周六 | 庆祝儿童节
...

另外对于纯文本笔记,使用日期时间,务必严格保持统一的格式,建议使用 YYYY-MM-DD HH:mm 作为固定格式,时间可选。

纯文本80字符日志:

每行开头是当日时间戳,控制每日日志字数在80字符内,中文可能40个汉字内,一年就365行,一年的点点滴滴就真的历历在目了。

 

可见在单个纯文本中的结构化处理,方式还是非常多样的。

 

Matthew Cornell 在2005年的博客中分享其纯文本的日志方式,和我目前稳定下来的记录方式差不多。每日以“---”作为间隔,正文后面带上时间戳。例子:

---
约李娟一块吃饭庆祝。
2024-05-03 12:30
---
启程去阿勒泰,第一站是喀纳斯。
DAY1:贾登峪——观鱼台——喀纳斯湖——夜宿禾木村
DAY2:禾木村——神仙湾——月亮湾——卧龙湾
2024-05-01 18:30
---

 

Jeff Huang 2022年曾分享其生产力工具就是一个永无止境的.txt文件,引起过一阵骚动。他对单个纯文本文件反复编辑更新长达14年,5万多行文字,记录他作为教授的所做的一切,每天的工作,和谁见面,遇到什么问题等等。通过搜索"meet with",会显示他有超过3000个预定的会议。他会在内容中插入 #关键词,以帮助其快速定位内容和查找上下文。每一天的日志以日期作为开始标记,使用类似"meet with"和#关键词的时候,需要保证格式统一,文本一致。在每一天结束的时候,他就会回顾一天记录的内容,并整理出第二天的待办事项,周而复始。

另外有个经典的案例就是 Soren Bjornstad 在其网站分享的 Random Thoughts,坚持从 2009年到2024年在单页网页上记录其所阅所思。以日期作为间隔,每天的多个事项以 @编号 作为锚点标记,关联的内容以 #编号 实现相互关联,目前已编号至13000+。耐心去看,当中有不少干货信息,是一笔宝贵的财富。

Matthew Cornell 曾对其单个大文本文件进行统计分析, 一个14000行的文本文件大约0.5MB,一个55000行的文本文件大约1.5MB。在2024年,这个大小的文本文件使用文本编辑器都可以秒开和保存,文件同步效率自然也没什么障碍。

 

把以上内容捋一捋,综合各大神的纯文本笔记特点,我的纯文本生产力模板文件结构是这样的:

______Motto座右铭 + Annual Plan 年度计划
/* 每次打开都警示自己和明确核心目标 */

座右铭:
年度计划:
-
-

______Inbox 收集箱
/* 你有什么想法,当天发生什么事情,什么都往这里填,可以加 #关键词 作为索引。当晚或次日早上清空,从而完成整理和回顾。 */

2024-05-01
- 灵感想法 #写作
- 今天发生的事
- 笔记
...

______ToDo List 待办清单
/* 参考 Todo.txt 待办记录规则,见以下规则于示例,+项目标记 作为索引,开始结束时间可省略 */

2024-05-01
- [x] (A) 收拾出游行李 +阿勒泰之旅 @home due:2024-05-01 2024-05-01 2024-05-01
- [完成标记] (优先级) 具体事项描述 +项目标记 @处理环境 due:期限YYYY-MM-DD 创建任务时间YYYY-MM-DD 实际结束时间YYYY-MM-DD
- [ ] (B)
...
- [ ]

______Open Projects 进行中项目
/* +项目标记 作为索引,在整个文档保持一致,标题可补充开始和截至时间 */

+项目名称 start:2024-05-01 due:2024-04-30
- 事项内容 #预定会议
- 事项计划
按需罗列计划细节
记录项目发生事项
...

______Done List 完成清单 + Daily 日记
/* 一天结束,整理、回顾,制定第二天计划,把当日收集箱和已完成任务转移到这里,可补充一段日记或每日复盘感想,每日以“---”作为间隔 */

2024-05-02
- [x] (A)
- [x] (B)
- [x]
...
当日所有速记
每日复盘
---
2024-05-01
- [x]
- [x]
...
当日所有速记
每日复盘
---

______Close Projects 已完结项目
/* 项目结束,把项目转移到这里,标记结束时间,可补充项目小结,项目间以“---”作为间隔 */

+项目名称 close:2024-05-01
- 事项
- 事项
...
项目小结:
---
+项目名称 start:2024-04-01 due:2024-04-30
- 事项
- 事项
...
项目小结:
---

以上每个“______栈”(模块)可根据自己需求调整,栈名称英文中文按喜好调整;“- 事项”按需无限增加;统一以“---”作为分隔;文件以年为周期保存为 .md 格式文件。/* */ 内为模板使用说明。

以上的纯文本生产力模板我自己也还在不断的实验和完善中。目前使用 VS Code 作为 .md 的编辑软件,工作上配合使用 WPS 进行文档处理,.md 文档文件夹使用 WPS云盘进行同步,同步文件夹放在 iCloud 盘中。这样就解决 Win + Mac 的同步处理问题,同时 iOS 可以安装应用打开 iCloud 盘中的 .md 文件进行移动编辑。部分收集箱的内容在一天结束的时候,我会转移到 Obsidian 的仓库中。这个纯文本文件作为 Obsidian 的仓库的其中一个文件也未尝不可,配合双链。

自从简化了我的笔记工具为 Obsidian + VS Code 之后,我已经很少有折腾新的笔记软件的念头。任务提醒应用我只有 iOS 原生的“提醒事项”应用。对于新生的软件工具,我只会大致的试用,了解技术的发展就适可而止了。利用倒腾软件工具的时间,把数据在各个软件间搬来搬去的时间,可以去多读几本书,多出去散步拍照。通过纯文本生产力的持续探索,我在 Obsidian 和 VS Code 所使用的插件也减少到寥寥无几。关于插件的极简,需另外开篇。

关于纯文本生产力,你还可以了解我上一篇内容介绍:值得拥有的纯文本生产力

 

扩展阅读:

- My Big-Arse Text File - a Poor Man's Wiki+Blog+PIM

- My productivity app is a never-ending .txt file

- A Plain Text Personal Organizer

这几个学术写作工具,或许可以帮你赢得审稿人青睐

作者 王隐
2019年12月17日 19:07

一篇优秀的英文 EI / SCI 论文,除了要有新颖的创新点和严密的实验方法外,或许还有一些细节需要我们关注。

你着手写一篇论文,看到各出版社不同的排版要求,该如何下手? Word?Markdown?抑或是更专业的 Latex?

无论你是理工还是文、商科,一篇论文如果只是文字,未免有些枯燥,不如做个能让人眼前一亮的配图来呈现你的实验数据与结果。

在这个仍以英文为学术主流书写语言的时代,如何保证你的论文语法通顺、词句无纰漏?要知道,拙劣的语法与词汇可是期刊拒稿的很大原因。

层层细节到最后,都会决定你的论文能否打动审稿编辑。所以,除了要关注实验本身,科研人或许还要顺手点亮些技能,这样才不会因小失大,白白付出苦熬实验室时的时间与精力。

幸运的是,随着学术写作工具的不断涌现,这些技能的学习门槛越来越低,各位科研勇士大可把更多精力放在研究的要点和实验结果上。

本文会在论文排版、制图、英文润色三部分介绍相应工具及技巧,下面就开始我们的学术写作速成之旅。

排版:脉络与格式

首先,我们来聊聊排版。

大部分学术期刊都要求作者提交一个已按期刊要求格式排好版的 PDF 文件,很多人第一个想到的就是用 Word 来排版。

虽然 Word 是一个比较成熟的排版工具,界面与功能还算完整清晰,但排版后的结果仍有很大的不确定性。

这种不确定性可能来源于不同的软件版本与操作系统,但最大的不确定性还是来自于作者的 Word 使用技巧。

一篇惊世之作万事俱备,急于与审稿人碰撞出科学火花,竟然被鸡飞蛋打的格式困住了,连编辑这关都过不去,想必每个人都不希望看到。那么,有没有一种办法可以快速按照期刊要求的格式进行排版呢?

可能很多人已经注意到了,一些期刊提供了基于 Latex 的模版包,供读者用以排版。Latex 是在 Tex 语言基础上的一种排版系统。和我们所熟知的 Markdown 一样,Tex 也是一种标记语言。与之不同的是,Tex 的语法稍显复杂,可以支持更多复杂格式。

使用基于 Latex 的排版工具,在模版包的帮助下,不但输入数字公式时更加简便,而且不用挨个调整参考文献的格式,以至于短时间就能生成一篇格式规整,排版精美的论文,作者的内容可以精准而迅速地表现在这个 PDF 文档中。

我们在这里以电气电子工程师学会(IEEE)旗下的期刊为例,假装一把学术大佬,下载 Transaction(IEEE 旗下比较有影响力的期刊系列) 的模版:

模版

可以看到,模版下载下来是一个压缩文件。

img
Transaction 系列期刊的 Latex 压缩包

模版下好后,我们就需要一个排版工具,这里最推荐的是云端工具 Overleaf,它可以即时保存,云端备份,历史记录可追溯,多平台等,跑在浏览器中的 Overleaf 最大的优点就是无需安装软件,解放硬盘。

并且,它还支持 Google 、推特、IEEE 等多账号登录。

img
Overleaf 登录页面

现在,我们注册完并登录 Overleaf ,就可以开始我们的排版了。

首先,我们先新建一个项目,将刚才下载的模版压缩包导入进来,Overleaf 可以帮你自动解压。

img
Overleaf 新建项目

这里可以看到,Overleaf 还支持 GitHub 导入,同时还自带了很多模版:journal、book、letter等。

导入之后,Overleaf 会自动进入项目,可以看到,模版压缩包中有多个 .tex 文件,代表包含了几种模版,我们选择期刊模版对应的 .tex文件(bare_jrnl.tex)。然后点击右边布局上方的 Compile 按钮(有时会是 Recompile),可以看到该模版渲染后的初始样式。

img
模版渲染效果

Overleaf 在页面布局也较为常规,最左列为文件结构,中间修改,最右预览。

可以看到,模版中,基本的结构已经划分好了,我们所要做的,就是要在 .tex 文件中把自己的内容填进去,模版中已经给了非常明确的提示。

img
模版结构

除了源文件之外,这个工具还提供了富文本预览(类似于代码高亮)的贴心功能,还有一些格式快捷键可供选择,如加粗、插入数字公式、有序/无序列表等。

img
富文本预览效果

当然,我们输入的文本需要遵循 Tex 语法规则,以下是一些常用格式及规则。

空格{} 或 \
字体大小\tiny{}, \scriptsize{}, \footnotesize{}, \small{}, \normalsize{}, \large{}, \Large{}, \LARGE{}, \huge{}, \Huge{}
斜体\emph{} 或 \sl{}
一些需要转义的字符%->\%,_ -> _,# -> #,& -> &,{ -> {,} -> }
行内公式​$…$
换行\

一篇论文除了文字,还包括图片、表格、无序列表、伪代码和参考文献等等,使用 Latex 都能快速并优雅生成。

上传图片的方式也较为常规:

img
上传图片

上传好我们的图表之后,我们在 documentclass\begin{document} 之间通过命令\usepackage{graphicx} 添加图片的包。

然后在正文处(此处以引言为例)添加一段插入图片的指令,包含图片宽度,文件名称、图片标签名称和注解信息,然后点击编译,图片就出现在右侧 PDF 的预览中。

如想在文中提到该图片,需使用 \ref{图片标签} 进行绑定,Latex 会自动生成该图片对应的编号。

img
插入图片的效果

对于独立行并编号的公式,则可以放置在\begin{equation}\end{equation} 之间,同样通过 \ref{label}引用。Overleaf 网站中也提供了一些 关于数学公式的教程,可以参考相关语法。

img
插入公式的效果

类似地,一个简易的三线表的格式如下所示:

img
插入表格的效果

以上,论文中的一些常见要素基本就已经介绍过了。

但还有一个令 Word 选手最为棘手的环节,就是参考文献

在基于 Latex 的排版系统中,参考文献主要放在以 bib 后缀的文件中,但是内容是怎样的呢?我们以 artificial intelligence 为关键词在 Google 学术中查询一篇文献为例,假设我们相中了这篇发表于 Nature Medicine 上的论文,点击引用后选择 BibTex:

img
引用一篇文章

然后,我们新建一个bib文件,再上面网页跳转后生成的内容粘贴进来。

img
新建 bib 文件

红框中的内容是该文献的引用标签,在文中需要引用的地方输入 \cite{标签} 就可以完成引用。由于标签代表了该参考文献,因此 bib 文件中的内容无需有序,且会按照期刊的规范自动编号。

img
插入参考文献效果

通过以上几步,一篇格式规整,排版精美的论文 PDF 就顺利生成了,不仅节省了时间精力,还可以轻松查询论文修改的所有记录。

img
论文修改记录查询

Windows 平台和 Mac OS 平台也有相应的 Latex 排版软件,比较有代表性的是 Windows 平台的 TeXstudio 和 Mac OS 平台的 MacTex,使用方法与在线平台 Overleaf 别无二致,不再赘述,下图为 TeXstudio 的使用界面:

img
TeXstudio 界面

好的排版工具自然也是顺手的写作工具,它们可以帮我们缕清脉络,同时也能帮我们更专注在要写的内容而不是格式上。

绘图:灵魂与亮点

如果说思路脉络是论文的骨骼,那么图表就是论文的灵魂。

数据可视化图表:Echart

img
论文中的图表

论文,就是将你所做实验进行阐述、记录、归纳的一次书面沉淀。所以,典型的理工科论文必然会有大量的实验数据,这个时候,可视化图表就派上了用场。

论文中的图表不仅要表意清晰,还要注重美观。学术写作常使用一些编程语言完成绘图功能,如 Python,Matlab 等,但这些工具对于非 Computer science 的科研人来说,会有一定的上手难度。而且这些编程工具绘图的用户体验也不能算好,不能满足「所改即所得」的实时性要求,更达不到对比的连贯性。

这里推荐百度出品的第三方可视化 javascript 库 Echarts

在 Echart 网页上,我们可以使用自带的官方模版快速生成图表,支持各种精细配置,简单易用。官方实例不仅给出了折线图、条形图、饼图、散点图等等基础图表,还提供了盒须图、热力图、平行坐标系图等较为新颖的图表模版,基本可以囊括论文对于结果数据展示的需要。

img
Echarts 提供的丰富图表

点击任意一个模版,左边是用户修改的区域,主要内容是 json 格式的图表的配置项,右边是根据用户修改实时显示的图表预览。右下角提供了三种默认的配色方案,由于不提供云端保存功能,因此在切换配色方案之前需要事先保存左边的内容。

图表生成之后,我们如何得到这个图片呢?我们对其左边配置项进行简单的修改,然后在 toolbox 配置项中添加可以保存图片的功能。点击右上角的下载按钮图片就会以 png 的格式保存:

img
使用 Echarts 生成图表

如果不喜欢官方提供的配色,还可以在配置项里进行详细的设置,配置项在文档中有详细说明。

img
Echarts 配置项文档

虽然,Echart 需要一定程度的前端基础,但不深。之所以推荐 Echart 也是因为它提供了比较完整的官方案例,就算没有多少前端知识,对着左边配置项改改参数折腾折腾也可以得到不错的图表效果。

当然,如果实在对编程特别抵触,tableau 也是一个不错的选择,上手难度不高,基本不用改参数,直接根据 Excel 表拖拽相应行列就行了,可以参考之前的 一篇文章

流程图/思维导图:ProcessOn

img
论文中的流程图

除了图表之外,论文中还会出现一些描绘结构和流程的示意图,此类图表可以更好地呈现实验方法的先后步骤。

在这里,推荐一个在线作图工具 ProcessOn ,支持流程图,思维导图,结构图,UML 图等等多种示意图,使用方法也非常简单,按照相应提示,尝试几次即可上手。

img
ProcessOn 的操作步骤

复杂示意图:sketch

img
论文中的结构示意图

在论文中,还经常会绘制一些不仅能体现步骤,还能表现数据特征,元素结构的示意图。

上图是描述两种神经网络结构及训练过程的示意图,从图中不仅可以看出方法执行的步骤,其中数据的组织方式以及网络的具体结构也一目了然。这样的图比流程图的结构更加复杂,元素的形态也多种多样,我们使用的是 Mac OS 平台下的设计绘图软件 Sketch。

Sketch 是一款矢量图绘制软件,具有和 PPT 相似的形状导入功能,并附有参考线,上手简单,以下是一个简单的例子:

img
Sketch 简易使用示意

可以看到,一些规则图形都能够通过简单的拖拽得到,修改填充和边框颜色以及长宽位置等属性也可以非常容易地进行修改。

图表作为文字与数据的抽象表达,可以更直观地向读者传达出你的观点,选择易上手的工具与合适的图表之后,还要注重美观、简洁,这样可以让你的论文更有亮点。

英语润色:保险

作为非英语母语的作者,英语近乎是最令人头痛的部分。令人惭愧的是,暂且不论流畅地道的表达,单是拼写语法,就能够牵扯我们很大一部分精力。有时圆睁双眼看上一整天,都不能发现其中若干的拼写语法错误,这时候我们就需要一个智能工具来帮我们查找并改正这些错误,在这里推荐一个英语润色工具 Grammarly,使用方式非常简单粗暴:

img
Grammarly 界面

并且它的插件可以集成在文本框内,在使用其他在线文本工具时,也可以方便地使用它的润色服务:

img
集成在文本输入框中的 Grammarly 插件

如果更正拼写及语法错误的简单功能不能满足你对于润色的需要,还可以使用人工润色,当然是需要加入会员并支付一定的费用:

img
人工润色入口

结语

一篇学术论文,操作周期上大概要 1 到 3 个月,这也决定了它和其他写作形式的不同之处:周期长、琐碎、强度高。

我们在写学术论文时,相比于前文提到的诸多细节,还应把更多精力聚焦在实验的思路,方法上,只不过是有些时候,众多琐碎总是会牵扯我们的时间与精力,而无法集中在将「实验完整还原在书面上」这一最基本的任务上。

也就是说,工具只能起到部分去除干扰的作用,论文能否在心水的期刊上发表,还要取决于实验本身以及你的呈现方式上。

至于科研捷径,应该是没有的。

如果说真有什么窍门,周末投论文好像不是好主意,周二周三倒是不错。

感谢 Dr. Li 对本文的大力支持,本文首发少数派,同步 WEB VIEW,未经许可,不得转载。

VuePress网站接入Google AdSense广告位

作者 千古壹号
2021年6月30日 19:00

前言

如果你的网站每月有一定的访问流量,可以考虑通过广告变现来获取一些收入。在自媒体的所有收入来源中,广告是最可观的收入方式。

博客网站想要接入广告位时,可以优先考虑接入Google AdSense,这是全球最成熟的广告系统。

本文会完整记录Google AdSense的账号注册、广告配置、收入提现等全流程的操作,希望能给有需要的读者一些帮助。

一、注册 Google AdSense 账号

1、注册账号

进入Google AdSense 官网 https://www.google.com/adsense/,点击右上角的”登录“按钮,登录Google 账号:

登录Google账号之后,然后在上图中,点击“开始使用”,出现如下界面:

继续:(国家选“中国”)

填写邮寄地址:

注意,这里的地址,一定要填写准确。因为以后你会收到 Google官方邮寄过来的 Pin码。

上图中,点击提交之后,会弹出如下界面:

2、将广告代码插入到vuepress网站中

安装上面的步骤注册完成后,我的 广告代码是:

1
<script data-ad-client="ca-pub-1601618516206303" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

回到 VuePress的项目代码里,配置 docs/.vuepress/config.js文件:

1
2
3
4
5
6
7
8
9
10
11
12
module.exports = {
head: [
[
"script",
{
"data-ad-client": "ca-pub-1601618516206303",
async: true,
src: "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"
}
]
]
};

然后把上面的代码部署到服务器。打开网站后,就可以看到广告代码生效了:

我这里配置的是二级域名web.qianguyihao.com。但是稍后Google 官方在审核我的网站的时候,审的是一级域名。所以,我还需要在qianguyihao.com里插入广告代码,这部分的操作过程是类似的,读者可以自行研究下。比如说,假如你的网站是 hexo框架搭建的,那可以研究下 hexo配置是怎么加入广告代码。

3、审核网站

将上面的广告代码插入到博客网站之后,我们再回到 Google Adsense官网的首页:

上图中,勾选“我已将代码粘贴到自己的网站”,然后点击“大功告成”按钮,之后会出现下面的弹窗:

上面的这张图表示:我们的广告账户,已经提交申请了。接下来,我们就可以安安静静地等待审核结果的邮件了。

审核时长一般需要一周左右。运气好的话,三天就能通过;运气不好的话,要等两周左右。

补充说明:只能用一级域名(如 qianguyihao.com)申请广告。申请通过后,广告代码可直接用于到该主域名下的任何子域名下, 而不需要对子域名再次审核。

4、审核通过

审核通过后,我们会收到邮件通知:

访问 Google AdSense 官网,会发现首页已经提示可以投放广告了:

20210626_1530

参考链接

二、 广告配置

配置ads.txt文件

在网站的申请通过之后,需要继续配置ads.txt文件。即:先下载ads.txt文件到本地,之后上传到网站域名的根目录下。

20210626_1531

上图中,点击”设置广告“按钮后,会自动跳到如下页面:

20210626_1558

上图中,点击”立即修正“,会出现如下界面:

20210626_1600

上图中,点击”下载“按钮,然后我们需要把下载下来的ads.txt文件,上传到服务器的指定目录下。

比如说,我的博客网站页面,是托管在阿里云服务器的/home/www/hexo的目录下,那我就把ads.txt文件上传到/home/www/hexo目录下就行了。

上传完成后,输入qianguyihao.com/ads.txt,如果成功加载到内容,说明配置成功。效果如下:

ads.txt 文件生效之后,在 AdSense官网的首页,就可以看到下图所示的界面:

20210627_2219

广告出现的位置

Google 广告分为两种:

  • 自动广告:Google 即会自动在所有最佳位置展示广告。这种广告应用之后,我们的网站会出现铺天盖地的广告,很影响阅读体验。所以本文不打算采用这种广告。
  • 在自定义位置插入广告:可以按照个人需要,在网站的指定位置插入广告。正好是本文想要采用的广告。

自动广告:

20210626_1710

在自定义位置插入广告:

20210626_1711

VuePress 添加 Google AdSense

本段讲述如何为 vuepress 站点配置”按广告单元”申请的 adsense 谷歌广告,从而可以在文章的任意位置插入广告。这里采用的技术方案是 vue-google-adsense 依赖库。具体步骤如下。

1、申请广告代码

进入Google AdSense官网:

20210627_2233

上图中,选择“按广告单元”展示,然后选择其中一个展示方式(这里我选的是左边第一个,红框处所示)。

20210627_2234

上图中,选择自己想要的展示尺寸之后,点击“创建”,出现如下界面:

20210627_2235

上图表示,成功申请到了广告代码:

1
2
3
4
5
6
7
8
9
10
11
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Web项目广告位 -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-1601618516206303"
data-ad-slot="1053166290"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

记下上方广告代码中的 data-ad-client 和 data-ad-slot,稍后要用到。

2、安装 vue-google-adsense

(1)在项目的根目录下,执行如下命令,安装 vue-google-adsense:

1
npm i --save vue-script2 vue-google-adsense

(2)在docs/.vuepress目录下,新建文件enhanceApp.js,在这文件中添加如下内容,载入vue-google-adsense:

1
2
3
4
5
6
7
import Vue from 'vue'
import Ads from 'vue-google-adsense'

Vue.use(require('vue-script2'))
Vue.use(Ads.Adsense)
Vue.use(Ads.InArticleAdsense)
Vue.use(Ads.InFeedAdsense)

3、在文章内插入 AdSense 广告

编辑想要插入广告的 markdown 文档,在合适的位置插入如下代码即可:

1
2
3
4
<InArticleAdsense
data-ad-client="ca-pub-XXXXXXXXXXXXXXXX"
data-ad-slot="XXX">
</InArticleAdsense>

上面的代码中,第一行和第四行是固定的。第二行填的是你的ca-pu-id(发布商ID),第三行填的是你的slot_id(客户ID),这两行内容,在我们刚刚申请到的广告代码中可以获取。

配置完成后,稍等大概一个小时,就可以在我们的网站上看到广告投放了:

20210627_2331

上图中,用箭头处围起来的地方,就是我们投放的广告位,可以看到,广告已经成功生效了。我在对应的 markdown 文件中,是这样写的:

20210627_2346

大功告成。

4、自定义广告组件

为了方便文档的书写,以及方便广告的管理,建议将广告代码进一步封装为广告位组件。

我们可以定义多个广告位组件, 每个广告位组件唯一对应 adsense 广告的 1 个 slotId。这样就可以把 data-ad-client 和 data-ad-slot 的取值都封装到组件中。

当站点申请了很多的 slotId 时,通过”自定义广告位组件”的方法实现插入广告, 管理或修改广告数据会非常方便。

具体操作步骤如下。

(1)创建 vue 组件:

创建目录docs/.vuepress/components,在 components 目录下新建文件,比如ArticleTopAd.vue,在里面写入如下内容:

1
2
3
4
5
6
7
<template>
<InArticleAdsense data-ad-client="ca-pub-1601618516206303" data-ad-slot="1053166290"></InArticleAdsense>
</template>

<script>
export default {};
</script>

上面的代码中,需要将 data-ad-client 和 data-ad-slot 的参数值替换为你自己的实际取值。

(2)插入广告:

在md文档的对应广告位处, 注入广告位组件 ArticleTopAd 即可:

1
2
3
4
5
6
7
# js 模板引擎 mustache 用法

<ArticleTopAd></ArticleTopAd>

## 二级标题

### 三级标题

参考链接

设置收款方式

当收益达到100$之后就可以提现了。可以使用招商银行进行电汇收款。也就是说,办一张招行一卡通就可以直接收Google的外汇(美元), 然后一键换汇为人民币。我们来详细看看,具体要怎么操作。

验证身份 & 验证邮寄地址

大概过了一个月之后,我的 Google AdSense收入达到了10美元,所以首页出现了这么个提示,让我验证地址:

20211029_1621

上图中,点击「操作」,出现了如下界面:

20211029_1627

上图中,可以看出:

(1)当您的收入达到进行验证所需的最低限额时,Google官方会将个人识别码(PIN 码)邮寄到您的付款地址。

(2)自 PIN 码生成之日算起,您可以在 4 个月内将该码输入帐号。如果您在 4 个月后还未输入该码,我们会停止在您的页面上展示广告。

(3)如果幸运的话可能会收到pin码,当然也可能收不到。

详情可查看如下链接:

上面这个链接里的内容,我截图存了个档:

20211029_1637_2

付款最低限额

关于付款最低限额相关的信息,详情可以看这个链接:

也就是说,收入达到10美元之后,需要我们验证邮寄地址;收入达到100美元之后,就可以开始提现了。指日可待。

上面这个链接里的内容,我也截图存档:

20211029_1638_2

参考链接

参考链接

VuePress+阿里云搭建在线知识库

作者 千古壹号
2021年6月16日 19:00

前言

开发时间

  • 2021-06-16:折腾一下午,终于完成初步目标。输入域名,可以打开我的 vuepress项目了。
  • 2021-06-16:晚上,接入了 Google Adsense 广告位。
  • 2021-09-17:折腾一晚上,完成了CDN加速。

开发环境

  • Node版本:v12.18.4
  • 服务器:阿里云
  • CDN加速:七牛云
  • 图床:七牛云
  • 项目的效果展示:web.qianguyihao.com

实现效果

  • 自定义域名
  • 知识库支持:左侧目录的导航+右侧标题的导航。
  • 所有文件和静态资源托管在个人的私有服务器
  • 自动化部署
  • 首屏渲染完成时间控制在2秒以内。
  • 支持CDN缓存,支持PWA本地缓存。
  • 接入 Google AdSense广告。

前端:该选哪一个知识库平台

知识库(非技术平台)

  • notion

颜值高,功能强大。但国内网络不太好,且有一定的学习成本。如果你能高效上网,notion是不错的选择。
·

  • 语雀

阿里的蚂蚁金服团队出品,几乎没有学习成本。如果想搭建一个公开的知识库,但又不想折腾技术,语雀是首选。

知识库(技术平台)

在技术领域,现在流行的知识库平台主要是这四个:(颜值都不错)

  • GitBook

GitBook分为两种:一种是开源的 GitBook,另一种是 GitBook.com。开源的GitBook 自从2018年之后,官方就不再维护了。所以最佳选择是 GitBook.com。

优点:GitBook.com几乎没有操作成本,直接导入 md 文件,或者导入 GitHub项目,就能生成知识库,而且可以绑定自定义域名。在所有技术类知识库平台中,GitBook.com的的颜值是最为美观的(至少我认为如此),目录结构的样式深得我心。

缺点:无法自定义配置(只能按官方的模板来)、国内的访问速度很慢(因为页面只能托管在 GitBook.com,不能托管在私有服务器)、无法接入广告位。

操作成本很低,配置也简单,支持接入广告位。但对 SEO 不友好。总的来说,适合做轻量级的知识库。

  • hugo-book

属于 hugo博客的一种主题,样式美观。但 hugo-book 才刚推出没多久,生态不成熟,要踩的坑也不少。

  • VuePress

尤雨溪大大推出的平台。

优点:支持自定义的配置非常多,甚至支持插入自定义的 JS 代码。渲染性能好、SEO友好、支持接入广告位。

缺点:官方文档写的很烂。上手门槛较高,需要自己花很多时间折腾。

总结:

没有最好的知识库平台,只有最合适的。

最终,我选定了 VuePress 作为我的前端教程的知识库平台。因为 VuePress 具有非常好的加载性能和搜索引擎优化(SEO),也支持接入广告位,满足我的需求。

VuePress官网对几个主流的平台也做了对比:

一、本地安装 VuePress 环境

1、安装 git 环境

2、安装Node.js环境

3、安装 VuePress

安装 VuePress:

1
npm install -g vuepress

4、初始化项目

(1)新建文件夹blog

1
2
mkdir blog
cd blog

(2)初始化项目:

1
npm init -y

初始化完成后,blog文件夹内会自动生成一个package.json文件,默认的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"name": "blog",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}

在package.json中,新增如下内容,配置启动命令:

1
2
3
4
"scripts": {
"docs:dev": "vuepress dev docs",
"docs:build": "vuepress build docs"
}

上方内容的意思是:

  • 启动项目: npm run docs:dev,这条命令就等于vuepress dev docs

  • 打包项目: npm run build 这条命令就等于 vuepress build docs

(3)新增.gitignore文件,将默认的临时目录和缓存目录添加到这个文件中:

1
2
3
node_modules
.temp
.cache

5、创建第一篇文档

(1)新建docs文件夹,这里面可以存放我们写的.md类型的文章以及.vuepress相关的配置:

1
mkdir docs

(2)创建第一篇.md格式的文档:

1
2
3
4
cd docs

# 这行命令的意思是,新建文件 readme.md,并写入内容 ## Hello VuePress
echo '## Hello VuePress' > README.md

6、在本地预览项目

输入如下命令,在浏览器预览项目:

1
2
3
4
$ npm run docs:dev

success [20:34:58] Build 5dfce5 finished in 4843 ms!
VuePress dev server listening at http://localhost:8080/

在浏览器输入 http://localhost:8080 ,就能看到 VuePress 的默认主题下的主页了:

7、打包项目

运行npm run docs:build将项目打包,打包文件会在docs/.vuepress/dist目录下自动生成。稍后,我们把这个目录下的文件,部署到服务器端,然后配置 nginx代理,就可以在网上上正常访问了。

二、页面配置

基本配置

(1)在docs文件夹中创建.vuepress文件夹:

1
mkdir .vuepress

这个文件存放的是vuepress相关的配置

.vuepress 目录下,新建一个总的配置文件config.js, 这个文件的名字是固定的:

1
2
cd .vuepress
touch config.js

config.js中最基础的配置文件内容如下:

1
2
3
4
module.exports = {
title: '千古前端图文教程',
description: '从零开始学前端,超详细的前端入门到进阶学习笔记。',
}

设置封面页

我们可以在 之前新建的 readme.md文件中,设置封面页。 官方也给我们提供了封面页的模板,比较实用的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
---
home: true
heroImage: https://vuepress.vuejs.org/hero.png
heroText: VuePress
tagline: Vue 驱动的静态网站生成器
actionText: 快速上手 →
actionLink: /zh/guide/
features:
- title: 简洁至上
details: 以 Markdown 为中心的项目结构,以最少的配置帮助你专注于写作。
- title: Vue驱动
details: 享受 Vue + webpack 的开发体验,在 Markdown 中使用 Vue 组件,同时可以使用 Vue 来开发自定义主题。
- title: 高性能
details: VuePress 为每个页面预渲染生成静态的 HTML,同时在页面被加载的时候,将作为 SPA 运行。
footer: MIT Licensed | Copyright © 2018-present Evan You
---

效果图如下:

支持PWA

vuepress还有一个我比较看重的优势, 就是支持PWA, 当用户没有网的情况下,一样能继续的访问我们的网站。

0.x 版本中我们只要配置serviceWorker: true 即可, 但是我们现在使用的是1.2.0版本, 这个版本中已经将这个功能抽离出来作为插件的方式使用, 下面就看一下具体如何使用的:

首先需要安装插件:

1
2
yarn add -D @vuepress/plugin-pwa
# 或者 npm install -D @vuepress/plugin-pwa

config.js中配置:

1
2
3
4
5
6
module.exports = {
plugins: ['@vuepress/pwa', {
serviceWorker: true,
updatePopup: true
}]
}

注意,为了让你的网站完全地兼容 PWA,你需要:

  • 在 .vuepress/public 提供 Manifest 和 icons
  • .vuepress/config.js 添加正确的 head links
1
2
3
4
5
6
7
8
// 配置
module.exports = {
head: [
['link', { rel: 'icon', href: `/favicon.ico` }],
//增加manifest.json
['link', { rel: 'manifest', href: '/manifest.json' }],
],
}

manifest.json 文件

1
2
3
4
5
6
7
{
"name": "qianguyihao_blog",
"short_name": "blog",
"version": "1.0.0",
"description": "qianguyihao的博客",
"manifest_version": 2
}

三、服务器端配置

配置nginx代理

首先,要确保你满足下面几个条件:

  • 你有一台服务器
  • 已经安装好nginx
  • 有一个已备案的域名

通过ssh工具远程连接服务器端,然后开始配置 nginx代理。

(1)为 vuepress 创建一个部署目录 /home/www/vuepress

1
mkdir -p /home/www/vuepress

(2)进入 /usr/local/nginx/conf 目录,并对 nginx.conf 配置文件进行相关配置:

1
2
3
cd /usr/local/nginx/conf
ls
vim nginx.conf

打开nginx.conf文件后,按 i 键由命令模式切换到编辑模式,修改三个地方:

  • 首先将最顶端的用户改为 root。
  • 其次,将 server_name 改为自己的域名。如果没有备案,可以先填写自己的公网 IP(在阿里云控制台的 ECS 实例中查看),访问时暂时用公网 IP 进行访问。
  • 最后,将location中的 root 项中的值改为 /home/www/vuepress;。如果 server 中的端口号不是 80,则改为 80

修改结束之后,先按 Esc 由编辑模式切换到命令模式,再输入 :wq 命令保存并退出编辑器。

我们需要在 nginx.conf 中 添加下面的配置:

1
2
3
4
5
6
7
8
9
server {
listen 80;
server_name web.qianguyihao.com;
location / {
root /home/www/vuepress;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}

(3)上传静态资源文件:

将静态资源文件放置到服务器上,路径为配置的 /home/www/vuepress, 可以借助xftp工具上传也可以通过git克隆, 选择适合自己的方式就可以。

稍后,我们将介绍如何进行自动化部署(即自动化上传文件),这种方式最科学,最高效。

(4)修改nginx后,重启nginx:

1
2
3
cd /usr/local/nginx/sbin
ls
./nginx -s reload

参考链接:

新建远程git仓库,为自动化部署做准备

为了使我们能够在本地向服务器实现自动部署,需要在服务器端新建一个 Git 用户。然后使用公钥连接成功之后,就可以方便地随时进行自动部署了。

具体操作,可以看我写的另外一篇blog:hexo+阿里云搭建博客网站

现在,我们开始在服务器端配置 Git 仓库。

(1)在服务器端使用 Git 用户 创建 git 仓库:

1
2
3
su git
cd ~
sudo git init --bare vuepress.git

(2)接着上一步,准备配置hooks(钩子)。hooks的作用是:当代码在本地执行 git push后,服务端会自动执行一些操作。

命令如下:

1
2
3
4
5
6
7
8
9
cd /home/git/vuepress.git/hooks
# 通过copy 新建post-update 文件
sudo cp post-update.sample post-update

# 修改文件权限
sudo chmod +x ~/vuepress.git/hooks/post-update

# 编辑 post-update 文件
sudo vim post-update

更改 post-update 文件为如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
#exec git update-server-info
echo "Im update"
# 代码仓库目录
GIT_REPO=/home/git/vuepress.git
# 临时目录
TMP_GIT_CLONE=/home/tmp/vuepress
# nginx的root目录(存放编译打包后的资源文件)
PUBLIC_WWW=/home/www/vuepress

rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
mv -t ${PUBLIC_WWW} ${TMP_GIT_CLONE}/*

上方配置中,GIT_REPO就是我们服务器端git仓库的地址,TMP_GIT_CLONE就是临时存放上传的资源的路径,PUBLIC_WWW是项目最后存放的地方,对于这个博客来说,这个PUBLIC_WWW就是之前Nginx配置的root。

这个脚本的含义就是,当我们在本地进行提交的时候,服务器接受后,会将其复制到临时存放目录,然后转移到项目路径下,从而使得我们:只需要在本地把生成的项目push到远程服务器,服务器就可以自动帮我们部署到对应的文件夹啦。

(3)创建临时目录:(这里其实是以root身份创建的)

1
2
sudo mkdir /home/tmp
sudo mkdir /home/tmp/vuepress

让git用户拥有这个目录的操作权限:

1
2
3
sudo chown git:git -R /home/tmp

sudo chown git:git -R /home/www/vuepress

(4)重启 ECS 实例。

文件的权限问题,遇到的坑

后来在本地上传文件到服务器的时候,每次都提示权限不足。原因是:我们用到的诸如/home/git/vuepress.git之类的文件,都是以root身份创建的,其所有者为root用户,所以git用户没有权限进行读写操作,因此我们可以使用如下命令,让git用户拥有这个目录/文件的权限:

1
sudo chown git:git -R xxx //xxx为对应的文件或目录

发布到服务器端

回到本地的vuepress项目,在根目录下,执行如下命令将项目的静态文件发布到服务器端:

1
2
3
4
5
6
7
8
9
10
11
12
# 编译生成静态文件
npm run build

# 进入生成的文件夹
cd docs/.vuepress/dist

git init
git add -A
git commit -m 'deploy'

# 以git用户的身份,发布到阿里云服务器。这里的xxx是服务器ip
git push -f git@xxx.xxx.xxx.xxx:/home/git/vuepress.git master

补充:当你执行上方的最后一行 git push命令时,如果提示下面这个错误,那可以确定,就是权限的问题:

1
2
3
4
5
6
7
8
# case1
remote: fatal: 不能为 '/home/tmp/vuepress' 创建先导目录: 权限不够
remote: cp: 无法获取'/home/tmp/vuepress' 的文件状态(stat): 没有那个文件或目录
To xxx.xxx.xxx.xxx:/home/git/vuepress.git

# case2
remote: rm: 无法删除'/home/www/vuepress': 权限不够
remote: cp: 无法创建目录 '/home/www/vuepress/vuepress': 权限不够

如果每次发布时,都要执行上面的命令,那就太麻烦了。所以,我们可以把这些命令,放到 deploy.sh下,实现自动化部署。具体做法如下。

自动化发布到服务器

在本地项目的根目录,创建deploy.sh文件来运行自动部署命令,文件里的内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/usr/bin/env sh

# 确保脚本抛出遇到的错误
set -e

# 生成静态文件
npm run build

# 进入生成的文件夹
cd docs/.vuepress/dist

git init
git add -A
git commit -m 'deploy'

# 如果发布到 https://<USERNAME>.github.io USERNAME=你的用户名
# git push -f git@github.com:<USERNAME>/<USERNAME>.github.io.git master

# 如果发布到 https://<USERNAME>.github.io/<REPO> REPO=github上的项目
# git push -f git@github.com:qianguyihao/web.git master

# 以git用户的身份,发布到阿里云服务器
git push -f git@47.112.XXX.XXX:/home/git/vuepress.git master

cd -

上面的内容配置完成后,以后,我们只要输入输入npm run deploy,并输入服务器的密码,即可一键将本地的vuepress文件部署到服务器端。

到此,我们就完成了服务端的配置。

参考链接

把上面的三个链接,结合起来看,最终实现了我的自动化部署的目标。

二级域名的 DNS 解析

在此之前,需要先将域名进行备案。域名备案成功之后,我们就有能力使用域名登陆自己的博客了。

我的项目是二级域名 web.qianguyihao.com,所以dns解析的配置是这样的:

上面的红框部分,就是我这次要加的dns配置。其他的配置,是我以前在搭建 qianguyihao.com 博客的时候做的配置。

访问页面

上面的内容配置完成后,我们就可以通过http://web.qianguyihao.com访问前端应用了:

注意,修改完nginx,然后重启nginx之后,如果网站打不开,可能是浏览器缓存的问题,建议重新开一个无痕模式的浏览器窗口;也可能是 https 的问题,因为暂时还没有开启 https,所以只能通过 http 来访问,访问https是打不开的。我就是在这个地方,卡了很久。

给二级域名安装 https证书

在阿里云的搜索框里搜“ssl证书”,然后进入管理控制台,申请免费证书:

上图中,点击“证书申请”之后,弹出如下内容:

上图中,填写自己的二级域名,然后点击下一步:

上图中,点击验证,然后提交审核。

审核通过后,就可以下载证书,并配置 nginx了,这部分的操作流程,可以参照我之前写的博客:hexo+阿里云搭建博客网站

二级域名开启 https 的nginx配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 443 ssl;
server_name web.qianguyihao.com;

ssl_certificate /usr/local/nginx/cert/5808232_web.qianguyihao.com.pem;
ssl_certificate_key /usr/local/nginx/cert/5808232_web.qianguyihao.com.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location / {
root /home/www/vuepress;
index index.html index.htm;
}
}

证书安装完成后,重启 nginx,然后就可以通过 https://web.qianguyihao.com 来访问了:

三、自定义主题:vuepress-theme-reco

我用的是 vuepress-theme-reco 主题。

主题安装和使用

安装:

1
npm install vuepress-theme-reco --save-dev

引用:

1
2
3
4
5
// .vuepress/config.js

module.exports = {
theme: 'reco'
}

自动生成 sidebar

在vuepress配置sidebar时,每篇文章都要配置对应的位置。正常情况下咱们会这样配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// .vuepress/config.js
module.exports = {
themeConfig: {
sidebar: [
{
title: 'vue', // 必要的
collapsable: false, // 是否展开分组 可选的, 默认值是 true,
sidebarDepth: 2, // 可选的, 默认值是 1
children: [
'document/vue/','document/vue/vue1.md','document/vue/vue2.md'
]
},
{
title: 'js',
children: [ /* ... */ ]
}
]
}
}

但是显而易见,当我们日后文章数量增加,又或者我们需要更改名称,这时候就又得找到位置更改名称。相当的麻烦。

我们可以写一段代码,对 sidebar 进行自动配置。做法如下。

首先,我们先整合下目录,根据不同文章分类进行分组,如下:

1
2
3
4
5
6
7
8
9
10
.
├─document/
│ ├─ vue/
│ │ ├─ README.md
│ │ ├─ vue1.md
│ │ └─ vue2.md
│ └─ js/
│ ├─ README.md
│ ├─ js1.md
│ └─ js2.md

接着我们在.vuepress创建两个文件 一个是sidebarConf.js,用来生成对应的侧边栏列表 另一个是getDocPath.js文件,用来获取所有的文章名。

1
2
3
4
5
6
.
├─ docs
│ └─.vuepress
│ ├─config.js
│ ├─sidebarConf.js
│ └─getDocPath.js

(1)获取文件名:

getDocPath.js 获取一个目录下的所有文件名。注意需要排除.DS_Store文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/**
* 获取目录下的所有文件的相对路径
* 解决路由名称枚举问题
*/
const fs = require('fs')
const path = require('path')
function getDocPath(title,collapsable,relateivePath) {
const absolutePath = path.join(__dirname, '../' + relateivePath)
const files = fs.readdirSync(absolutePath)
const components = []
// 排除检查的文件
var excludes = ['.DS_Store']
let arr = files.sort(function(a, b) {
// 截取'.'之前的数字进行排序 例如 1.vue 2.vue 3.vue
return a.split('.')[0] - b.split('.')[0];
});
arr.forEach(function (item) {
if (excludes.indexOf(item) < 0) {
let stat = fs.lstatSync(absolutePath + '/' + item)
if (item == 'README.md') {
components.unshift(relateivePath + '/')
} else if (!stat.isDirectory()) {
components.push(relateivePath + '/' + item)
} else {
console.log(relateivePath + '/' + item)
getDocPath(relateivePath + '/' + item)
}
}
})
let frame = {
title:title,
collapsable:collapsable,
children:components
}
return frame
}
module.exports = getDocPath

(2)配置侧边栏:

sidebarConf.js 调用getDocPath()方法,组成侧边栏的数据列表,对应文章开头的原始配置格式。

1
2
3
4
5
const getDocPath = require('./getDocPath')
module.exports = [
getDocPath('vue',true,'document/vue'),
getDocPath('js',true,'document/js')
];

(3)挂载进config:

1
2
3
themeConfig: {
sidebar: require('./sidebarConf'),
}

至此完整的功能已全部写完, 如果此配置还满足不了你的需求,想配置成多个侧边栏,在每个不同的分类生成对应的自己想要的侧边栏。

生成的效果如下:

本段的参考链接:

我也尝试了按照下面两个链接里的方法,自动生成sidebar,但是并没有生效:

设置侧边栏的标题

不需要在文件中写一级标题,我们可以在Front Matter中设置tittle。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# XXXX.md
---
title: Kaldi声纹识别代码详解|egs/aishell
categories:
- 声纹识别
tags:
- Kaldi
publish: true
---

::: tip
尝试添加摘要
:::

<!-- more -->

## 正文的一级标题
(正文)XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

参考链接:

参考链接

bug修复

1、标题无法选中的问题:

临时的解决办法:打开node_modules/vuepress-theme-reco/styles/theme.styl文件,然后将h2的样式加上z-index -1,将h3的样式加上z-index -2

参考案例

vovo-docs

网上的很多案例,讲的都是搭建博客,却没有讲搭建知识库、文档、wiki。我想要的效果是:左边显示多个文档的结构和目录导航,右侧显示单篇文章的目录导航。下面这几个案例,就很不错。

我搜遍了整个 google 和github才找到的。我发现,如果要找源码的话,搜 github 比搜google高效多了。

全网就这一个案例,提供了完整的demo和源码。我fork了一下。

很美观,很规范。

冴羽的TS教程

上面这篇文章,作者@冴羽也是用的vuepress-theme-reco主题,操作步骤写的比较详细。缺点是,没有讲如何自动生成侧边栏(左侧)目录。

项目效果如下:https://ts.yayujs.com/

Apifox的官方文档

做的很漂亮,也是用的vuepress-theme-reco主题,可惜没有开源。

好看的主题推荐

网站性能优化:开启gzip压缩

要知道,网站的打开速度取决于浏览器打开下载的网页文件大小。如果传输的页面内容文件减少,那你网站的打开速度一定会加快。特别是手机端的用户,打开网站速度受限于移动端网络,所以压缩网站页面内容显得至关重要。

在 nginx配置中开启 gzip压缩之后,可以将网页文件至少压缩50%,极大的提高网页的打开速度和网站性能。具体做法如下。

进入服务器的 /usr/local/nginx/conf 目录,并对 nginx.conf 文件进行相关配置。找到#gzip on;这行配置(这行配置是在http层的),并在其下方加入如下内容:

1
2
3
4
5
6
7
8
9
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types application/atom+xml application/geo+json application/javascript application/x-javascript application/json application/ld+json application/manifest+json application/rdf+xml application/rss+xml application/xhtml+xml application/xml font/eot font/otf font/ttf image/svg+xml text/css text/javascript text/plain text/xml;

然后重启nginx。

压缩前:

压缩后:

除此之外,我们可以使用站长工具,打开「网页GZIP压缩检测」,查看检测结果:

上图中可以看到, gzip的缩率高达78%,压缩效果显著。

参考链接:

网站性能优化:CDN加速

CDN 加速就是把原服务器上数据复制到其他的诸多服务器上,用户访问时,哪台服务器近就访问那台服务器上的数据。CDN 加速优点是成本低,速度快。适合访问量比较大的网站。而且,如果你的博客所在的主机是限制流量、限制带宽的,那么,一个很好的办法就是把图片、js文件等静态文件部署到其他服务器(即cdn所在的服务器),这样就可以极大地减少主机流量消耗,并提升网站的访问性能。

科普概念的参考链接:

下面来讲一下我的 web.qianguyihao.com 网站是怎么进行CDN加速的。我是把 网站的 js 静态文件部署到了七牛云上。cdn文件的域名采用的是 web.smyhvae.com

七牛云 cdn 优化步骤

在这之前,请先确保你的七牛云账号里,已经新建好了一个自己的「对象存储空间」。

(1)打开七牛云,新建域名:

新建完成后,等待几分钟,就审核通过了:

(2)配置DNS域名解析:

(3)给七牛云上的 web.smyhvae.com 申请 https证书。配置方法详见我的另外一篇文章:

(4)把 vuepress项目编译后的文件(即docs/.vuepress/dist/assets目录下的所有文件) ,挨个上传到七牛云。

文件列表如下:

上传截图如下:

如上图所示,上传的时候,注意路径的前缀。比如, assets/css目录下的文件,前缀需要设置为assets/css/

优化成果

(1)开启 gzip压缩之后:页面首次渲染完成时间,从55秒变成了10秒。

(2)开启CDN加速之后,页面首次渲染完成时间,从10秒变成了2秒以内。

(3)再加上 VuePress 框架本身支持 pwa本地缓存,二次访问速度贼快。

修改静态资源的访问路径

做了cdn加速之后,所有的静态资源文件,url链接会从 https://web.qianguyihao.com/assets/js/app.53a9121a.js 这样的格式变为https://web.smyhvae.com/assets/js/app.53a9121a.js这样的格式。这里,我们把前者称之为链接1,把后者称之为链接2。

当我们输入 网址 web.qianguyihao.com时,要怎么确保网站加载的是 链接2的资源而非链接1的资源呢?这就要我们继续修改 vuepress 项目的配置。继续往下看。

一开始,我想的是修改 vuepress项目配置文件的base 参数:

如上图所示,当我尝试把 base参数的值改为https://web.smyhvae.com/之后,网站首页的效果符合预期,但点击其他tab之后,效果竟然是这样的:

如上图所示,页面的url里,竟然多了个 https。把这个页面刷新之后,就提示“打不开了”:

那要怎么办呢?可以这样做:

(1)首先,base参数不用改,继续保持 \即可:

(2)其次,打开 vuepress项目编译后的目录web-vuepress/docs/.vuepress/dist,然后手动里面的所有的引用链接,改动内容如下:

改动前:

1
2
3
4
5
href="/assets/

src="/assets/

"url": "assets/

改动后:

1
2
3
4
5
href="https://web.smyhvae.com/assets/

src="https://web.smyhvae.com/assets/

"url": "https://web.smyhvae.com/assets/

差不多有5000个地方要改。改完之后的效果如下:

(3)将改完之后的内容进行发布:

  • web-vuepress/docs/.vuepress/dist/assets目录发布到七牛云的cdn加速空间。
  • web-vuepress/docs/.vuepress/dist目录发布到阿里云服务器。

发布完成后,就达到了我们的预期效果:

参考链接

使用的是vuepress框架。

vuepress接入广告、统计,写得很清楚。

如果只搭建一个页面,可以参考这个。

重度使用这款墨水屏手机之后,谈谈我对电子纸的理解和预测

作者 千古壹号
2021年2月11日 01:28

这篇文章不是万字长文,而是三万字长文。建议先收藏转发,再细细品读;如果有条件,可以在电子纸设备上阅读。

前言

阅读是最便宜的旅行。最近几年,我的业余时间里投入最多的就是看书,大部分是阅读的电子书。对我来说,阅读不只是为了满足好奇心和求知欲,有时候纯粹只是一种习惯和消遣,就像很多人喜欢玩游戏一样。

看电子书的时候,有人喜欢在电脑上边看边整理笔记;有人喜欢在 iPad上写写画画;而更多的人是选择在手机上看电子书,手机是肢体的延伸。

电子屏幕看久了之后,很容易视觉疲劳,眼睛会疼,头会晕,甚至影响到身体健康。于是,在看电子书的时候,如何做到“既保护眼睛,又保证阅读体验”,成了所有人的难题。

几个月前,我得知有一款主打阅读功能的电子墨水屏手机「海信A5 Pro 」上市,评价还不错。于是,我在11月1号,趁着双十一的优惠价,毫无犹豫地下了单。

将这款手机重度使用了三个多月之后,我特地来谈一谈使用感受。

也有人说:看纸质书最享受、最舒服。其实,不看书才最舒服,看书是反人性的。纸质书和电子书的阅读方式,各有千秋,本文就不做重点讨论了。

只讲手机测评远远不够,故事才刚刚开始。电子纸未来将会成为革命性的产品。

墨水屏的介绍

墨水屏的技术原理

液晶显示屏:目前常见的手机屏幕、电脑屏幕采用的是液晶显示方式。通过电压改变有机化合物分子的排列结构,使背光源(发光二极管)发光,并通过RGB(三原色)滤光片,组合产生不同色彩,这样人们就可以在屏幕上看到不同颜色的信息。类似于三棱镜实验:一束白色的光透过三棱镜之后,就可以看到不同颜色的光。

也就是说,液晶显示屏的背光是恒定光源,液晶旨在控制透光程度,经过不同颜色滤光片后,让三原色产生独立的明暗变化,进而组合出各种色彩。

墨水屏:墨水屏的显示材料是电子墨水,这些电子墨水呈胶囊结构,不同颜色的墨水附着在正、负电荷上,通电后,通过正负电压使带着不同颜色墨水的电荷相互吸引或排斥,改变电荷的排列,显示出文字和图片。

如上图所示,关于电子墨水屏的原理,说的通俗一点就是:

电子墨水是由一颗颗微小的胶囊组成,胶囊的大小约等同于人类头发的直径。每颗胶囊里装有黑白混合的多个液体粒子,白色粒子带负电荷,黑色粒子带正电荷。根据同性相斥、异性相吸的原理,只要在胶囊的两侧按需加上正负电荷,就能使黑白粒子按照一定的规则游动,从而显示白或者黑,组成各种文字和图案。

由于电子墨水是一种液态材料,所以被形象地称为电子墨“水”。

最重要的是:墨水屏是将周围的光(比如灯光或自然光)照到屏幕上,再反射到人眼,对人眼的伤害很小;而且,屏幕看上去可以接近纸张的效果。

每个胶囊中有很多个粒子,如果再混合加入青色(C)、洋红(M)、黄色(Y)等颜色的粒子,就可以实现全色域的显示效果,也就是彩色墨水屏

参考链接:元太科技 | 电子墨水技术

电子纸、电子墨水屏的区别

我们知道,墨水的英文翻译是 ink;于是,电子墨水的英文翻译是 Electronic Ink,简称是 E Ink、EInk、E-Ink,小写是 eink(这四种简称都可以,官方写法是第一种)。电子墨水屏也称之为 E-ink 屏。

为了方便普通读者辨识大小写,本文采用 E-ink 作为简称(不属于以上四种简称的任何一种)。你看,现在连电子墨水的简称都没统一起来,可见这项技术是多么不成熟。

这里不得不提到的另外一个词是“电子纸”。很多人误以为“电子纸”等于“电子墨水屏”,其实他们完全是两个不同的概念。

从技术角度看:

  • 电子纸技术:是具有类似纸张印刷显示效果的新型显示技术,是一类技术的的统称。对应的屏幕叫电子纸。
  • 电子墨水技术:是属于电子纸技术的一种,也是目前唯一投入商用的电子纸技术。对应的屏幕叫电子墨水屏。电子墨水技术和电子墨水屏是台湾的元太科技公司独有的技术和产品。

从产品角度看:

  • 电子纸:采用电子纸技术的显示屏(显示器)则称之为“电子纸”或者“电子纸屏幕”,英文全称是Electronic Paper,简称E-Paper。特点是靠反射发光、像纸一样阅读舒适、超薄轻便、超低耗电、甚至可弯曲。

  • 电子墨水屏:采用电子墨水技术的显示屏(显示器)则称之为“电子墨水屏”。

总结一句:

电子纸技术是某一类技术的统称,电子纸是某一类显示屏的统称。电子墨水(E-ink)技术是电子纸技术的一种。电子墨水屏(eink屏)是电子纸的一种。

电子墨水技术(E-ink技术)和电子墨水屏(E-ink屏)是台湾元太科技公司独有的技术和产品,具备独有的专利和商标,这家公司几乎垄断了现在的电子纸市场。其他公司几乎绕不开E-ink技术的专利。

电子纸技术主要有以下几种技术方案:

  • 电泳显示技术(EPD)
  • 胆固醇液晶显示技术(Ch-LCD)
  • 双稳态向列项液晶技术(Bi-TNLCD)
  • 电润湿显示技术(EWD)
  • 电流体显示技术(EFD)
  • 干涉调制技术(iMod)

其中,电泳显示技术最具代表性,已量产多年,是类纸式显示器较早发展的显示技术,基本原理是利用外加电场控制液体内部的带电粒子的运动,当粒子运动到某一位置时,呈现不同颜色的显示效果。

电子墨水(E-ink)技术底层采用的就是电泳显示技术

在电子书阅读器领域,亚马逊可谓是一骑绝尘;而在电子书阅读器的上游——电子纸屏幕领域,E-ink是处于垄断地位。现在的绝大部分电子纸屏幕,都是台湾的元太科技公司出品和生产的E-ink屏幕。

当然,E-ink技术如今也有一些潜在的竞争对手,比如 CLEARink 就是被很多人认为可以威胁到E-Ink的技术;其他的竞品还有Rdot、Plastic Logic等。

看到这里,肯定有人会问:“元太科技公司这么厉害的吗?想不到,台湾也有这么牛逼的企业。”

非也!

其实,E-ink技术是E-ink公司发明的,该公司成立于1997年,隶属麻省理工学院的媒体实验室。后来,E-ink公司在2009年被台湾厂商元太科技公司收购了,后者曾经是E-ink面板的生产商。

电泳显示技术并不是E-ink公司的首创,我们不妨来回顾一下电子纸的发展历史,就能一目了然。

电子纸的发展历史

1975年,美国施乐公司的PARC研究员Nick Sheridon率先提出电子纸和电子墨的概念。就是那个发明了鼠标、计算机图形界面、复印机、激光打印机、传真机、以太网和一些重要计算机语言的施乐公司。

在20世纪70年代,日本松下公司首先发表了电泳显示技术

与此同时,在20世纪70年代,施乐公司当时也在研究电泳显示技术。然而最初研究出的普通电泳由于存在显示寿命短、不稳定、彩色化困难、造价高等诸多缺点,松下公司和施乐公司的实验曾一度中断,搁置了20年,让电子纸技术的研究一直只停留在实验室里的理论阶段。

20世纪90年代,麻省理工学院的媒体实验室重启对于电子纸的研究,并在1996年4月,利用电泳显示技术开发了一种新的电子纸技术:电子墨水显示技术,成功制造出电子纸的原型。到这里,电子纸的研究,终于看到了工程实践的成果,从此打下后来的电子墨水技术的基础。

1997年4月,在麻省理工学院(MIT)媒体实验室,研究取代纸张的电子显示技术的雅各布森和鲁斯•威尔科克斯(Russ Wilcox)等人共同创立E-ink公司,并全力研究电子纸的商业化。1999年5月,E-ink公司推出名为Immedia的用于户外广告的电子纸。雅各布森们期望自己研发出的电子墨水(electronic ink)能进入大众视野,改变人们获取和阅读信息的方式,这个技术和思科的互联网解决方案一起,在1998年被《财富》杂志评为“有潜力改变世界的独家技术”。

2000年11月,E-ink公司和朗讯科技公司正式宣布已开发成功第一张可卷曲的电子纸和电子墨。

2002年3月召开的东京的国际书展上,出现了第一张彩色电子纸。

2004年,索尼发布第一台电子墨水屏阅读器:Sony Librie EBR 1000。

2007年,亚马逊发布第一代Kindle 阅读器,引爆电子书市场。因为 Kindle的热卖,“电子墨水屏”这个词,终于被大众熟知。到2009年,元太科技已是全球最大的电子纸生产商。但更上游的技术掌握在世界上唯一同时具备技术和量产能力的E-ink公司手中。

E-ink公司在1997年就发明了E-ink技术,等到它最终被市场认可,等了整整十年。在这十年里,E-ink公司一直都处于亏损状态。

2008年遇到金融危机之后,E-ink公司承受不住巨大的亏损,于是在2009年,E-ink公司被自己曾经授权的制造商台湾元太科技公司收购,数值达2.15亿美元。

2007年的第一代kindle,售价 399 美元:

电子纸发展史中的趣事

根据上面的历史,我们还可以发掘一些有意思的故事:

1、2007年的11月,亚马逊的创始人杰夫·贝佐斯(Jeff Bezos)和苹果公司的斯蒂夫·乔布斯(Steve Jobs)有过一次短暂的会面。贝佐斯请乔布斯试用亚马逊的新产品——一块白色的板子,上面密密麻麻地布满了按键。亚马逊打算卖这种东西,Kindle。乔布斯试着使用了一会儿,然后把它放在面前的桌子上,很明显他对这种产品不看好。“太难看,还没有触摸功能,”乔布斯说,“全键盘让机器的体积增大了20%,能替换电池的设计也太蠢。而且,现在还有谁看书?去年40%的美国人只看了不到一本书。”

乔布斯说的不无道理,而且这种情况正愈演愈烈。在互联网的冲击下,传统的出版业越来越步履维艰。

尽管如此,当年的贝佐斯还是不愿意放弃 Kindle。他对乔布斯说:“你瞄准的是5%的个人电脑用户,而我瞄准的是5%愿意阅读的用户。

2、E-ink 技术是E-ink公司的注册商标和专利,后来E-ink公司因亏损严重,被台湾的元太科技公司收购。E-ink 技术的底层技术原理电泳显示技术

电泳显示并不是E-ink的首创技术。早在20世纪70年代,施乐公司著名的帕洛阿尔托研究中心(PARC,Palo Alto Research Center)的研究员尼古拉斯·K·谢尔敦(Nicholas K.Sheridon)就提出了这一设想。他设计了一种叫做“Gyricon”的显示设备:将大量小球塞进两层薄板中间,薄板之间的间隙充满比重与小球一样的油。每个小球的两个半球都分别涂上不同的颜色,而且根据颜色的不同,一半带正电,另一半带负电。这样,当给薄板某个区域加电时,相应区域的小球将会旋转,排列出图像或者文字,就像是马赛克拼出图形一样。

施乐公司的这项发明申请了专利,但是被施乐公司的高层取消了。这项短视的决策让电子纸的诞生晚了25年,直到20世纪90年代后期才真正面世。麻省理工学院(MIT)的媒体实验室开发出新型电子墨水显示技术,这项技术的显示原理和Gyricon一脉相承,但是又克服了Gyricon的一些缺陷:它使用微型的、充满油的透明胶囊取代Gyricon的小球,同样把小球夹在两层薄板之间。小球里装了一些更细小的带电微粒,其中一些是黑色,另一些是白色。两种微粒所带的电荷不同,当给背部的薄板加电时,面板上就可以看到相应的图形。这项技术当然也被申请了专利,这就是E-ink。

E-ink可以显示多级灰度,可以制造成任何尺寸的面板,这些都是Gyricon所不能做到的。而Gyricon的优点,例如断电后依然可以保持图案不会消失、省电、可视范围广、对比度高等,都被E Ink完美地继承了下来。在E Ink公司的不懈推广下,使用E Ink技术的显示装置,终于出现在市场上。

但是,要想让E-ink降价是很困难的。作为拥有这项专利的唯一企业,E Ink公司2009年已经被台湾的元太科技收购,后者曾经是E Ink面板的生产商。现在全球大多数生产电子书阅读器的厂商都在依赖元太科技:它的客户名单上除了亚马逊之外,还包括飞利浦、索尼、翰林、汉王、福昕等我们耳熟能详的电子书阅读器企业。

3、世界上第一款电子墨水屏阅读器不是亚马逊公司的kindle,而是索尼公司的Sony Librie EBR 1000。

电子纸的优点

电子纸的优点很多,大致列举如下:

  • 护眼;
  • 阅读舒适:接近纸张印刷的显示效果;
  • 省电节能、超低耗电;
  • 超薄轻便;
  • 由于电子墨水里的胶囊颗粒是液态,所以未来更容易做成可折叠、可弯曲的电子屏幕。

电子纸最大的优点就是护眼,第二个优点是阅读舒适,接近纸张。

有人问:“护眼有什么了不起的吗?光靠护眼,就能让电子纸成为伟大的发明?”

我很明确地告诉你,能做到护眼,还真就是很了不起。

首先,手机和电脑的液晶显示屏,其面板后的光源是“穿”过屏幕直射到人的眼睛,且强度较大。看久了之后,很容易对眼睛造成刺激和伤害。而电子纸则是将周围的光(比如灯光或自然光)照到屏幕上,再反射进人的眼睛中,对人眼的刺激较小

墨水屏设备(比如 Kindle)大多自带了「背光灯」功能。周围光线强的时候,你可以关掉背光灯;周围光线很暗的时候,你可以打开「背光灯」,调到合适的亮度就能看见。

第二,手机和电脑的液晶显示屏,都会发出蓝光,其中波长为400nm-450nm的短波蓝光会对人眼产生伤害。这种短波蓝光穿透性比较强,可以穿透人眼的正常组织到达视网膜,造成对视网膜色素上皮细胞和感光细胞的损伤。但在看阅读墨水屏设备时,进入人眼的短波蓝光成分很少,相对来说对眼睛伤害很小。

为了保护眼睛,手机厂商们想尽了各种办法,现在几乎所有的智能手机都自带了“护眼模式”和“深色模式(夜间模式)”:

手机上的护眼模式,建议每个人都开启。至于电脑上,我建议安装第三方的护眼软件「f.lux」,这款软件可以降低屏幕色温,减弱蓝光,软件网址是:https://justgetflux.com

当你坐在电脑面前几个小时的时候,很容易头晕眼花。装上「f.lux」软件之后,连续用几个小时的电脑,眼睛也不会太花,亲测有效。程序员写代码的界面,基本都是设置的黑色主题,也是在保护眼睛,他们在996加班的节奏下,不是脑子受不了,而是眼睛受不了。

说到“深色模式”,其实比较影响视觉体验,而且对比度不够明显,阮一峰之前就说过:

暗模式(dark mode)现在很流行,但是它会导致不易阅读的问题。文字亮度的提高,使得老年人和眼睛散光的人,觉得文字周围有光晕。

所以,暗模式不适合文字阅读。纸张是白的,墨水是黑的,因为这样的搭配最容易阅读。

这一点我赞同。我认为:选择深色模式的时候,用户是把护眼放在更高的优先级,而非阅读体验,此时牺牲一部分阅读体验无可厚非。

第三,手机和电脑的大多数液晶显示屏,会反光,即「镜面反射」。很多人会拿电脑屏幕或者手机屏幕照镜子,就是这个道理。如果你在一个头顶上环绕着各种灯光的屋子里用电脑,电脑屏幕里会反射出刺眼的灯光,这是很不友好的。而电子纸的反射是属于「漫反射」,不会反射出刺眼的灯光。

为什么大多数的液晶显示屏都有「镜面反射」,因为这种方式展示的画面内容更清晰、更真实、更高保真、还原度更高。此外,手机屏幕在太阳底下看不太清,这也是它的一个缺点。

综合上面这三点,能做出护眼的显示屏,就是一项伟大的发明。靠自身发光的显示屏,很难做到护眼。目前为止能做到真正护眼的显示技术,只有电子墨水技术,而电子墨水屏的显示效果恰好很接近纸张印刷的效果,正好迎合了阅读者的喜好。

当然,这里我得强调一点:不管是用液晶屏还是电子纸,都要尊重眼睛本身的生理特点,不能长时间近距离用眼;否则容易导致近视。预防近视最有效的方法是户外光照,其次的方法是尽量避免长时间近距离用眼。如果你经常去户外走动,这两个预防的方法都能达到。

这一段中,我们重点说明的是:同样是在近距离用眼的情况下,墨水屏比液晶显示屏对眼睛的刺激和伤害要小很多很多,甚至对身体的伤害也要小很多。对于很多996的打工人来说、对于无数个戴着高度近视眼镜的人来说,对于那些想去户外却不得不在教室里继续奋战的学生们来说,对于大部分自制力不强、明知道出去走走有好处却仍旧做个宅男腐女的人来说,墨水屏可以起到很好的缓解作用,墨水屏真的是一项神奇的发明。

上面这句话中,我提到墨水屏对身体的伤害会变小。你可能会感到惊讶,且听我娓娓道来。

不知道你有没有这样的感受,就是:眼睛盯着手机屏幕持续两个小时之后,不仅眼睛难受,头也会有点晕。如果你掷地有声地告诉我说你不晕,恭喜你,说明你还年轻,底子好,等到了一定的年纪,你也晕。但有一点是可以肯定的:如果一天不用手机、不用电脑,你肯定会神清气爽一整天。

用电脑的时候并不晕,晕的是起身的时候。为啥呢?因为电脑是生产力工具,主要用它来工作或者处理耗时的任务,人在用电脑的时候通常比较专注,不容易被其他的因素影响。起身的时候,就是放松的时刻。就类似于:牙疼的人,工作的时候不疼,吃饭前会疼。

这个时候,杠精可能会说:“只要是在办公室坐久了,对身体都不好,手、心脏、血压、体重等方面都会有影响。不管看什么屏幕,都会伤眼睛,多出去走走吧,看看外面的风景。”这话当然没错,但是年轻人要讲武德,我这篇文章是在做对照组试验,你的意思是让我直接离开实验室?我说的对照组实验指的是:同样是坐着做事,面对电子设备的屏幕做事,对人眼甚至身体的伤害会大很多。同样是在看屏幕的情况下,电子纸比一般屏幕对眼睛的伤害更小。

基于此讨论,我们才能确保在一个频道上。

如果你在图书馆坐一天看一天书呢?估计不会感到不适吧?甚至觉得是在放松。我以前考研的时候,每天在自习室里学习10个小时以上,每周只放半天假,备战了半年,从未感受到眼睛或者身体的不适。

说完电子纸的优点,那电子纸的缺点有没有呢?由于目前的电子纸技术只有电子墨水技术这一种得到了应用,我们接下来就通过各种电子墨水屏设备,来看看它的缺点有哪些。

市面上有哪些墨水屏设备

Kindle

2007年,亚马逊发布第一代Kindle ,电纸书大受追捧。我相信,每一位第一眼见到 Kindle 的人,都曾经感叹:Kindle 简直称得上尤物。因为它让我们在看电子书的时候,几乎能达到纸质书的阅读效果,而且不伤眼。此外,kindle的存储空间很大,既可以看亚马逊官网的正版电子书,也可以将第三方的电子书拷贝到kindle进行阅读。充一次电,能用两周以上。

如果你热爱阅读或者想培养阅读的兴趣,真的应该买一款kindle感受一下什么叫真正的电子书阅读器。买来之后,即便你将它束之高阁,也值得作为收藏品,作为日常谈资。

现在市场上售卖的kindle有三款:Kindle青春版、Kindle paperwhite、Kindle Oasis。如下:

我不推荐你买青春版,因为分辨率太低。如果看中性价比,我推荐买 paperwhite 款,8G内存足够用;如果你比较土豪,买 Oasis 也是不错的选择。曾经有一款kindle voyage。手感很好,但现在已经不售卖了。

Kindle paperwhite的技术参数如下:

这里我需要提醒一下,kindle的6英寸,指的是墨水屏的屏幕尺寸,不包括四周的外壳尺寸,加上外壳差不多得有8英寸。iPhone 12的屏幕也是6英寸,可以对比参照一下。

kindle 买来之后,确实可以做到很安静地看书了,因为它只能用来看书,也可以导入离线电子书,其他的啥也做不了。虽然它也有内置的浏览器,连接wifi后就能上网,但这个功能基本等于残废。另外,kindle 无法安装第三方软件。

我们可以在 amazon官网购买正版电子书,购买之后,电子书会自动下载到 kindle阅读器上(前提是 kindle要连上wifi);你还可以通过发送邮件的方式将 mobi格式的电子书发到kindle阅读器上(具体过程很简单,可自行网上查找),也可以把 azw3格式的电子书通过 usb 传输的方式拷贝到 kindle阅读器。

我们知道,普通的电脑显示器分辨率是72ppi;当你把一本实体书的封面摆在眼前的时候,它的分辨率是300ppi左右。超过300ppi的图像,人眼已经看不出颗粒感了;分辨率再往上提升,人眼也不会感受到明显的区别。

而 kindle paperwhite的技术参数里显示它的分辨率是300ppi,这是什么概念呢?kindle的300ppi连电脑显示器分辨率的72ppi都比不上,颗粒感很强。所以千万不要把两种屏幕的分辨率放在一起比较,完全没有可比性。

我们再来看看刷新率。目前,市场主流手机和电脑屏幕的刷新率基本都是60Hz,即每秒显示60帧画面。也就是说,当我们在使用手机的时候,本质上是手机在连续播放一张张静态图片,每秒播放60张,让肉眼误认为眼前的画面在动。

温馨提醒一下,不要把「刷新率」和「帧率」弄混了。「刷新率」是屏幕的参数,「帧率」是图像、视频等内容的参数。

那 Kindle 的刷新率是多少呢?搜遍全网你都找不到这个参数值。真实的答案是:kindle根本就没有刷新率的概念。kindle 只有在翻页的时候才会刷新,其他时候是静止的;而且每次翻页的时候屏幕就会全黑地闪一下(或者全白地闪一下)。

除此之外,kindle屏幕在刷新的时候,有时还会有「重影」,即部分电子墨水胶囊未刷新留下的图像残留。

看到这里,你很失望吧?

既然看动态的内容这么卡,那看看静态的图片,效果应该不会太差吧?首先,目前为止所有的 kindle 都是黑白屏,这一点,你要有心理预期。其次,屏幕的色彩是16级灰度。你在手机或者电脑屏幕上看的图片,都是256级灰度。二者完全不在一个数量级。用 kindle 看看漫画还行,要是看别的图片,毫无欲望。

如果你只是看文字, 那也足够了。时间长了之后,都能接受,人的适应能力还是很强的。

总而言之,到现在为止,墨水屏的显示技术,很不尽人意。很多人买了kindle之后,因为受不了它的卡顿,觉得翻页太慢,最后还是回到了手机上看电子书,或者干脆不看书,总而言之就是将kindle束之高阁,或者盖泡面。

综合来说,Kindle已经是采用了最好的墨水屏,连 Kindle 屏幕的体验都这么差,其他的墨水屏设备体验,也基本好不到哪里去。

虽然 Kindle 阅读器的市场最大,亚马逊官网的电子书最全,但总不能让它一家独大,必然会出现很多竞争者。我们来看看,市面上主流的墨水屏设备,都有哪些。

文石阅读器

“文石”这个品牌的英文是“BOOX”,这家总部在广州的公司于2008年成立,专门做电子书阅读器。

2013年,文石发布第一款Android系统的BOOX产品;2017年,文石发布全球首款双模式电子墨水屏阅读器 Max2。

由于文石只做阅读器本身,不做书城,所以文石的优势在于:它是开放的Android系统,可以安装第三方App软件。文石阅读器内置的书城是「京东书城」。

文石阅读器的颜值是值得称赞的,厚度也很薄,最薄的可以达到 5.8mm。

注意,上面这张图显示,文石阅读器有四种刷新模式:普通刷新、快速刷新、极速刷新、X刷新。级别越到后面,虽然翻页速度越快,但内容的显示效果会越差(残影严重)。所以,大家在使用文石阅读器看书的时候,建议选择“普通刷新”或者“快速刷新”模式。

下面这张照片,是来自好友@直树桑(公众号“拾书小记”的主创​):

掌阅的 iReader 阅读器

掌阅科技在2008年就开始做数字阅读,iReader软件是它的主打产品。2020年11月,字节跳动以11亿元入股掌阅,成为掌阅的第三大股东。2015年8月,掌阅的 iReader 电子书阅读器首发上市。

iReader 阅读器是封闭系统,不支持安装第三方软件。

准确来说,iReader阅读器基于 Android 系统定制的,是适配墨水屏的深度定制的封闭系统,不支持安装第三方App;没有内置浏览器,不支持浏览网页;不支持插卡、不支持U盘、不支持扩展内存。可以通过 wifi 或者USB的方式传输电子书。

iReader 阅读器内置了这些软件:掌阅书城、印象笔记、有道云笔记、百度网盘;但不支持安装其他的App。

目前为止,所有的 iReader 阅读器都是如此。

kindle 好歹有个内置浏览器勉强能用,iReader连浏览器都没有。

小米多看阅读器

多看科技公司成立于2010年2月,2012年被小米公司全资收购,成为小米旗下成员企业;多年来,多看一直在做电子书阅读软件和电子书市场,口碑挺好。

2019年11月,小米终于发布了第一款阅读器,即「小米多看阅读器」;2020年12月,推出「小米多看阅读器Pro」。

小米多看阅读器支持开放的安卓系统(可安装第三方App软件),内置了「多看阅读」、「当当阅读」和「微信读书墨水屏版」这三大书库;同时内置了多看网盘、百度网盘软件。

我个人的第一印象是:这款阅读器的颜值不够,而且外观没有辨识度。

墨案(moaan)阅读器

墨案是小米生态链旗下的公司,专注做数字阅读。墨案有很多种阅读器,比较特别的是下面这款inkPalm 5:

从外观上看,墨案的inkPalm 5阅读器很像手机,注意,它不是手机,只是阅读器。它比手机轻很多,只有115g。

这款阅读器的定位非常准,不需要手机的功能,又能在一些场合伪装成手机。毕竟 Kindle 的尺寸太大,在很多场合拿着不方便。

得到阅读器

2019年11月,得到阅读器发布,是由「得到App」所在的公司出品的。得到在国内的知识付费领域做得风生水起,我在之前的一篇文章《得到App的公司要上市了,我的关注点竟然是这个》中讲过。

得到阅读器既有自己的书城(与得到App里的内容资源相同,目前主要是专栏、听书、电子书),也支持开放的操作系统,可以安装第三方的App软件。

得到阅读器的墨水屏,是由「文石」公司提供的技术方案。

好友@饶全成同学使用了得到阅读器描述:“得到阅读器的屏幕,摸起来有点像磨砂的感觉;相比之下,我更喜欢 kindle的光滑屏幕,手感更好”。当然,怎么选,看你个人喜好。

微信读书阅读器

微信读书阅读器于2021年2月1号上市,限量500台:

微信读书阅读器的机身的材质和大小都与 文石的BOOX Poke 3 保持一致,正面采用的纯平玻璃面板,屏幕尺寸为 6 英寸,1072 X 1448 的分辨率,达到 300 ppi,不支持安装其他App,重量约为 150g,售价1499元,性价比不高。要知道,文石的Poke3售价也才1180元。你愿意交智商税吗?

”微信读书阅读器“和”得到阅读器“属于同类型的产品,既做书城,也做阅读器。在电子书阅读领域,除了 kindle 之外,微信读书 App 应该是国内的使用人群最多的软件了。

reMarkable(墨水屏平板)

reMarkable 墨水屏平板主打的是手写功能,是国外的产品。我们来看看几张宣传照:

看了上面的照片之后,是不是觉得 reMarkable 很唯美?我一点都不看好它。

用户拿到 reMarkable 之后,首先关心的是云服务和文件传输功能,要怎么把外部的epub、pdf等电子书传进去?

reMarkable 有自己的云服务,官网也提供了PC端软件和移动端App。理论上,只要在任何一个终端上传文件,就会自动在 reMarkable 阅读器上出现这个文件。然而, reMarkable 在国内的云服务很不稳定,形同虚设。导入电子书最稳妥的方式是连接 USB,通过网址 10.11.99.1 在浏览器里进行文件导入,简直太麻烦了。reMarkable 默认不支持中文语言,对中文文档的文件名,支持效果也不太友好;也没有背光功能。

reMarkable 配备了手写笔。在上面写写画画岂不是很开心?非也。在 reMarkable 绘画的流畅度肯定是大打折扣的;还有,谁会在一张只有黑白颜料的粗糙平板上画画呢?基本没有。绘画首先看中的是色彩和流畅,相信我,按目前的墨水屏技术水准,就算你买了 reMarkable ,也忍受不了多久。最后还是发现纸和笔来得快,以及,iPad 你值得拥有。

售价2500人民币的reMarkable第二代,注定是个小而美的产品:

索尼电子纸

索尼早在2004推出了世界上的第一款电子墨水屏阅读器。14年后,索尼在2018年6月推出了全新的大屏电子纸。上方截图中的这款,是索尼在2020年8月推出的,型号为「索尼电子纸DPT-RP1 黑色款」,厚度仅5.9mm,屏幕尺寸13.3英寸,和A4纸尺寸相当,可谓名副其实的电子纸。

索尼的这款电子纸,属于封闭的Android系统(不可安装第三方App软件,需要破解后才能支持),最大的特点就是屏幕够大,看文档资料很舒适。试想一下,假如你有500页的pdf文档,电脑上看眼睛受不了,手机上看屏幕太小,在索尼电子纸上看就正好合适;相比其他墨水屏设备,它唯一的缺点就是贵。

索尼电子纸与Kindle Paperwhite:

各种阅读器小结

市面上的还有很多其他品牌的墨水屏阅读器,比如:汉王、博阅、科大讯飞等。我就不专门介绍了。

按照我的购买建议以及市场推广能力来看,我把市面上主流的墨水屏设备,综合打分如下:

  • 四星:Kindle阅读器(拥有强大的电子书资源)、文石阅读器(不做书城,专注做好阅读器)
  • 三星:掌阅的iReader阅读器、小米多看阅读器,以及其他厂商的阅读器。
  • 两星:微信读书阅读器、得到阅读器。既做电子书阅读平台(书城)、也做阅读器。
  • 一星:索尼电子纸(侧重于大屏看文档资料)、reMarkable墨水屏平板(侧重于手写)。

如果你是某个电子书阅读平台(比如kindle、微信读书、得到等阅读平台的其中之一)的重度用户,可以买对应的阅读器;如果你只是想要一个开放系统的阅读器,方便安装各大书城的电子书软件,那么,文石阅读器是个不错的选择。

多看、掌阅等平台有很多小说、武侠、漫画等领域的电子书,是其他平台所没有的,看个人需要。

索尼电子纸很适合大屏看资料,这个出发点很好,但价格昂贵,很难推广;reMarkable墨水屏平板的亮点是手写,但墨水屏本身的手写体验目前比较糟糕。

如果你觉得阅读器的屏幕太大,不方便携带,想买个小屏的墨水屏设备,且希望在没有wifi的情况下也能连网,那么,电子墨水屏手机就是首选,我给它打四星半。我们继续往下看。

第一款电子墨水屏手机

一家名叫 Yota Devices 的俄罗斯公司于2007年成立,这家公司在2013年12月发布了世界上的第一款电子墨水屏手机 YotaPhone,而且是双面屏(液晶屏+墨水屏);在2014年发布了第二代产品 YotaPhone2,在当年的北京APEC 会议期间,俄罗斯总统普京以国礼的形式将 YotaPhone2 赠予了主席大大;在2017年10月,发布了第三代产品。YotaPhone3。

最终,这家公司因产能太低于于2019年4月宣告破产。

海信墨水屏手机

国内做墨水屏手机的厂商也有一些,但整体都比较小众。我大致介绍一下:

2014年,文石发布国内第一款电子墨水屏手机 BOOX E43,一直没有兴起波澜。▼

现在国内做墨水屏手机最知名的品牌是海信

  • 海信在2017年推出第一款双面屏手机海信 A2 pro;
  • 2018年11月,发布双面屏手机——海信A6;
  • 2019年10月23日,发布墨水屏手机——海信A5,以及双面屏手机——海信A6L。
  • 2020年6月1日,发布墨水屏手机——海信A5 Pro,以及墨水屏手机的彩色版 ——海信A5 Pro CC
  • 2020年12月11日,发布5G墨水屏手机——海信A7,以及彩色版的A7 CC。

备注:这里的双面屏手机是液晶屏+墨水屏,墨水屏手机则只有墨水屏。另外,A6的发布时间竟然比A5要早,不知道海信怎么起名字的。

截至当前时间(2021年1月),海信现有的几款墨水屏产品里(如上图所示),如果你打算买,我推荐你买海信A5 Pro海信A7,或者彩色款的海信A7 CC。这三款都可以。最好根据自己的预算和对屏幕尺寸的需求,按需购买。当然,手机的颜值和重量,也是选购时需要考虑的因素之一。

A5 Pro的价格是1599元,屏幕尺寸是5.84英寸,黑白屏。不建议购买彩色款的A5 Pro CC,因为不如黑白屏的流畅和清晰。

A7的价格是1999元,屏幕尺寸是6.7英寸,黑白屏,有5G网络。虽然5G网络在墨水屏设备上是噱头,但是A7的墨水屏体验和流畅度比A5 Pro好一些。

另外,彩色款的A7 CC,流畅度和清晰度如何我还没试过,据说还不错。欢迎用过的读者留言反馈。

将来,海信会推出更多款型的墨水屏手机,其他手机厂商也会加入竞争,可以持续关注。

关于我购买的这款A5 Pro墨水屏手机的详细测评,我会放在下一段。

为什么不买双面屏手机?把手机翻来翻去的动作,你不觉得奇怪么?不明真相的群众还以为你是在用手指摩擦手机。

为什么不买 A5 Pro CC?因为彩色的墨水屏技术还不太行,清晰度和色彩饱和度很差,再等等看。▼

上面这张图可以看出,彩墨屏在看文字的时候,清晰度要差很多。就算你彩墨屏看图片或照片,这种感觉就像是在看失真的漫画,估计看完之后,还是会忍不住回到手机上看看这张照片到底长什么样子。

另外再提示一点:海信A5 Pro墨水屏手机的屏幕分辨率是 720*1440;而彩色版的海信A5 pro CC的分辨率是没有具体数据的,估计是官方不愿意透露?

5G版的海信A7如何?屏幕的使用体验流畅度要好比 A5 Pro好一些,但如果是因为它的5G而付费并不值得,你只是看个文字和图片而已,需要这么快的网速么?5G功能在墨水屏上完全就是噱头,华而不实。

此外,掌阅和腾讯阅文集团的口袋阅,也推出了墨水屏手机,但都过于小众,忽略不计。补充说明:口袋阅只支持安装自家应用商城里的App,不支持安装其他未收入的第三方App。

墨水屏显示器

北京的大上科技公司成立于2014年3月,并在2014 年 12 月发布了全球首款电子墨水显示器——Paperlike,尺寸是13.3英寸,无人问津。▼

2020年12月25日,大上科技发布 25.3英寸大屏的电子墨水显示器,吸引了一部分人(包括我)的注意。由于无法量产,只能先预约再购买。▼

第一看到这款墨水屏显示器的宣传图,感觉是个稀有物种,真的是“万众期待”吗?一点也不。值得买吗?肯定不值得。一万多块钱,干啥不好?

电脑作为生产力工具,如果配上如今的墨水屏显示器,基本没有什么应用场景。

另外,上面的宣传图里说“大上科技是E-ink墨水屏显示器的发明者”,这句话很容易让人们误以为“大上科技是E-ink墨水屏的发明者”,其实它主要是做工业设计。实际上,E-ink技术和E-ink墨水屏是台湾元太科技公司独有的技术和产品。台湾元太科技公司提供了E-ink墨水屏之后,其他的硬件厂商可以根据需要,定制不同的硬件设备(阅读器、手机、平板、显示器、甚至未来的电脑等一切需要屏幕的设备)。

与其期待墨水屏显示器的到来,倒不如先期待E-ink技术能够有新的突破。至少要等彩色版的墨水屏技术相对比较成熟之后,墨水屏显示器才会有应用市场。

当然,大上科技作为全球首家发布墨水屏显示器的公司,这种勇于尝试的探索行为,精神可嘉,值得点赞。

电子墨水屏价签

1993年,第一个电子价签在欧洲诞生,但由于生产成本高昂无法被大量商用。

电子价签(电子货架标签)代替纸质标签后,可以远程实时更新商品的价格、折扣、属性等信息,并将数据同步给后台。

仓储自动化管理的重点是操作自动化、数据准确率、流程效率化,电子价签在数据这部分就可以起到很重要的作用。

如果给电子价签配上溯源码,可以将商品进行溯源,配合打通供应链。

很多电子价签,是LCD液晶屏为主,但液晶显示屏虽然外观华丽,显示色彩丰富,屏幕反光却极为严重,容易造成消费者视觉不适。所以点阵式的电子墨水屏价签广受青睐。

比如部分盒马鲜生的门店里就有电子墨水屏价签,并带了溯源码:(这张照片由好友@Felix提供)

由于墨水屏本身就很贵,再额外加上蓝牙传输、耐低温、防水等特性,使得墨水屏的电子价签成本很高:(大概70元左右一个)

海信墨水屏手机的使用测评

初体验

2020年6月1日,海信发布电子墨水屏手机——海信A5 Pro,当时的原价是1799元。我在11月1号,趁着双十一的优惠价1499元,毫无犹豫地下了单。现在去JD上看,需要1599元。▼

美图欣赏1:

美图欣赏2:

美图欣赏3:

这款手机拿到手之后,外观是这样的:

海信A5的整体颜值还是不错的,外壳是塑料材质,白色款手机的前置面板是黑色,后置面板是白色,重量是164g,屏幕尺寸是5.84英寸。这种外观和材质,让我想到了我曾经使用过的小米手机2S、小米手机4C。

上面的图里所显示的画面,就是手机息屏时的状态。屏幕在不切换画面的时候,是处于静止状态,基本不耗电。

即友@麦克猹拍的实物图也不错,如下:

屏幕的显示效果如何?

当我们拿到一款墨水屏设备时,除了看外观、屏幕尺寸、重量、系统是否开放之外,如果想要看它的屏幕显示效果,应该重点看这几个指标:

  • 1、黑白对比:底色(背景色)够不够白,文字够不够黑。
  • 2、文字、图片等内容的显示效果是否清晰,是否有颗粒感、锯齿感。
  • 3、切换画面(翻页、滑动页面、打字等)的时候,是否流畅(有没有出现卡顿、高延迟、闪屏、残影等)。

带着这三个指标,我们看看海信A5 Pro(以下简称A5)的显示效果到底如何:(对标Kindle)

  • 缺点:底色偏灰、偏暗。Kindle的底色很白。
  • 缺点:无论是底色还是内容,都带有比较明显的颗粒感,比kindle差很多。
  • 缺点:文字不够黑,且有颗粒感,比kindle差很多。
  • 缺点:图片完全没法儿看,一片漆黑。看视频就更别想了。
  • 优点:翻页的时候,没有出现明显的卡顿、延迟,虽然会有略微的残影,但不会闪屏。相比之下, kindle在翻页的时候,会很明显地闪屏,这一点,A5比 Kindle 强很多。
  • 优点:打字方便。因为打字可以单手操作,且可以安装第三方输入法。

A5给我整体的感觉是:墨水屏的质量很一般,比Kindle差很多。如果说拿着 Kindle是在看正版书,那么,拿着A5,像是在看盗版书,纸张比较劣质,文字有明显颗粒感。毕竟A5手机才一千多块钱,包括了墨水屏,以及手机该有的其他零件(摄像头、双卡双待等)。其他的电子书阅读器,大多也是1000~2000元不等。A5的这个价位已经很低了,还能要求什么呢?

一图胜过千言万语,来看看A5的显示效果。

文字的显示效果:(近距离看)

文字的显示效果:(从左到右依次是:纸质书、海信A5 Pro、小米手机、Kindle)

查看图片的显示效果:

▲上图中可以看到,A5墨水屏显示的图片,一片漆黑,基本残废;Kindle显示的图片,勉强能看。

温馨提示一下,根据我的实际使用体验,建议使用海信A5手机的同学将显示模式设置为均衡模式,体验最佳:

灰阶测试

我们知道,目前,墨水屏的色彩基本都是16级灰度。你在手机或者电脑屏幕上看的图片,可以呈现256级灰度。

上面这张图,就是256级灰度,从黑到白的渐变。我们来看看它在各种设备上的显示效果:

上图中,从左到右依次是:海信A5 pro、Kindle、小米手机。可见,同样是16级灰度,海信比kindle的显示效果要差很多。海信的实测效果,只有8级灰度左右。

我每天的阅读时长

按照往常的生活习惯,我平均每天使用手机的时长是4个小时或者5个小时,这还是在我996加班的情况下。▼

使用了墨水屏手机之后,我每天使用墨水屏的阅读时长为3个小时左右,使用普通智能手机的时长为1.5个小时。▼

使用墨水屏手机后,极大地减少了智能手机的使用时间。相当于是把我在 iPhone上的3小时阅读时间,转移到了墨水屏手机上,同时达到了我想要的护眼效果。

有人问:“在持续加班的情况下,每天三小时的阅读时间,怎么做到的呢?”我自己的阅读节奏是:

  • 早上七点到八点,阅读一小时。
  • 如果下班早(晚上九点前下班的话),晚上睡前阅读半个多小时;如果加班太晚,就不阅读。
  • 吃饭排队&地铁上阅读半个小时。
  • 周末休息的时候,会看上几个小时,有时候可能会阅读一整天。

并不是每天都如此,但大部分时候是如此。不玩游戏、不刷抖音的日子,就是这么朴实无华。

我的好友@Rene告诉我,她每天使用手机的时长经常达到十个小时左右(而且是在需要上班、偶尔加班的情况下):

耗电量如何?

说到耗电量,我们先拿其他设备做个对比。

我手上的iPhone SE 第二代,电池容量是1821mAh,屏幕尺寸是4.7英寸,充一次电可以连续使用大概4个小时。如果每天使用1.5个小时,刚好可以用两天(此处可以理解为:使用时间是3个小时,待机两天的耗电量相当于使用1个小时,加起来刚好4个小时)。

Kindle Paperwhite 4 的电池容量是1500mAh,主屏幕尺寸6英寸,充一次电之后,大概可以使用20个小时。假设每天阅读三小时,充一次电可以使用一周。Kindle的功能单一,基本只有自带的书城服务,使用的过程中不是很耗电。

海信A5 Pro的电池容量4000mAh,屏幕尺寸5.84英寸,它耗电量如何?我测试了很多次,答案是:在关闭背光灯的情况下,充一次电可以使用9个小时,假设每天阅读三小时,可以使用三天(待机的耗电量可以忽略不计)。在打开背光灯的情况下,续航时间会缩短一两个小时。

另外,这个手机有个很高级的功能叫“超级省电模式”,你可以选 6 个你想用的 App,除此之外其他的App一概不能用。

广告上说,A5 Pro的使用时长可以达到32个小时:

这就是卖家秀和买家秀的区别。广告打的震天响,用的时候一坨翔。

肯定有人会站出来说:“测试续航时间,肯定要区分关不关WiFi、开不开背光灯、看不看视频呀?“真实的场景里,谁会刻意这么做?都是顺气自然的。我所描述的续航时间,是日常情况下的平均续航时间,是本着对普通人负责任的原则。

可以作为备用机,不能作为主力机

A5支持双卡双待,且可以安装第三方App软件。墨水屏手机作为备用机还是挺方便的。我简单列举几个备用机的使用场景

  • 1、开通一个手机号的小号,专门用于和陌生人联系,比如:收发快递、注册网络账号等。小号建议错开运营商,假如你的大号是中国移动,那么,小号建议开通中国电信或者中国联通。当你抵达一个信号不好的无人之境,发现中国移动没信号,然后掏出备用机,说不定电信/联通就有信号。按照我自己的经历,很多地方的信号强弱依次是:移动 > 电信 > 联通,但这个排序不绝对,跟地区有关,跟手机硬件也有关。
  • 2、注册微信小号、QQ小号,安装在备用机上。这年头,大多数(成年)人的社交账号,都有小号。至于用途是什么,你懂得:电脑A给电脑B传文件、联系网友、做副业、搞微商、发广告、自己跟自己聊天等等。
  • 3、看到有个公众号,写了篇万字长文,于是转发到微信小号,在墨水屏上阅读。
  • 4、周末出去放松,不打算带手机,这个时候就可以把备用机带上,应急的时候可以打电话、移动支付、发微信、扫码乘车等。
  • 5、出门的时候,很多人选择带充电宝,而我选择带两个手机。
  • 6、参加一个饭局,跟桌上的很多人都不熟,大家都各自低头玩手机,缓解尴尬。而我则拿起墨水屏手机看书,毫无违和感。我要是拿个 Kindle 在饭桌上,岂不成了异类?

A5墨水屏手机可以作为备用机,但不能作为主力机,比如说:

  • 1、看图片的时候,基本是黑的。看视频就更别想了,卡得不行。虽然有摄像头、有拍照功能,但形同虚设,屏幕里的画面一片漆黑。
  • 2、回复领导消息的时候,蜗牛般的打字速度,你会急死。
  • 3、因为A5手机是黑白屏,所以在疫情期间,你无法出示绿码,这是个很大的问题,别轻视。

有人好奇A5墨水屏手机的微信聊天体验如何,我截几张图你们对比下:

我所理解的“测评”

我在此前从未写过测评,但我认为:有一种好的测评,是读者需要的、关心的、想要了解的内容,而不是作者罗列一大堆参数、美图、科普,显得自己很专业,是资深玩家。

使用体验就是一种很好的测评。比如说,你重度使用了一款产品之后,你的同学问你这个好不好用?值不值得买?你会怎么回答他?肯定是他需要的、关心的东西。这就是使用体验。

比较经典的反面案例就是:各种测评大佬给手机跑分。但是,跑分高不能说明啥,用了一年还是卡。咦?竟然有点押韵…

最近,我打算买一款数码产品,看了无数的测评之后发现,还是咨询客服来的快。

我推荐购买哪些墨水屏阅读设备

市面上的电子墨水屏设备五花八门,如果让我推荐阅读相关的阅读器,我会推荐下面这几款:

  • 1、入门的阅读器:Kindle。属于封闭系统,但可以导入离线电子书。Kindle最大的作用不是盖泡面,而是墨水屏的启蒙。很多人购买的第一台墨水屏设备就是Kindle。
  • 2、小屏的阅读设备:海信的墨水屏手机,堪称国货之光。支持开放的Android系统,可自由安装第三方App。将来也许会有其他手机厂商做墨水屏手机,大家可以持续关注。
  • 3、大屏的阅读设备:文石的阅读器。支持开放的Android系统,可自由安装第三方App。具体选哪个型号,需要看你的预算和对屏幕大小的需求。比如说,如果你经常看A4大小的PDF文档,文石的BOOX Max系列就是不错的选择(价格感人,5800元)。将来也许会有其他品牌的墨水屏平板,可以持续关注。

以上推荐只是我的个人喜好,无任何利益相关。如果你想要的阅读器侧重于彩色版、手写等特别的功能,可以自行了解。

我在使用哪些电子书阅读平台和软件

我平时阅读时是以电子书为主。如果这本书没有电子版,我就会去买纸质版。

我在阅读电子书时,使用了这些软件:

  • 电子书阅读平台(会员制):得到App、微信读书、Kindle Unlimited。
  • 电子书阅读平台(买断制):Kindle。
  • 看书评、打分:豆瓣、Goodreads。
  • 阅读 ePub 格式电子书:iBooks(Mac和iOS平台)、微信读书(全平台)、calibre(Windows和Mac平台)、Neat Reader(全平台)、多看阅读(Android和iOS平台)、iReader 掌阅(Android和iOS平台)
  • 阅读mobi、azw3格式的电子书:Kindle阅读器
  • 阅读PDF格式的电子书:MarginNote、福昕阅读器、Adobe Acrobat Reader DC、浏览器。
  • 电子书格式转换:calibre
  • 手动制作电子书:calibre + GitBook
  • 书单管理:晒书房
  • 纸质书拍照整理成电子档书摘(OCR):阅读记录App、白描iText
  • 读书笔记整理:notion、flomo

上面的软件中,冒号前面的是功能,冒号后面的是软件名称。凡是普通Android手机能安装的软件,墨水屏手机都能安装。

在此我只是简单列举出我所使用的软件清单,后续的文章中,我会专门介绍我如何利用这些软件构建阅读体系。

为什么kindle的宿命是盖泡面?

为什么kindle的宿命是盖泡面?主要有两个原因。

第一个原因:买Kindle的人多,用 Kindle 的人少。这主要体现在三个方面。

首先,Kindle作为消费品,买了不一定要用。《读库》的主编老六在一次访谈中说道:

书的打开率其实很低。有的人觉得自己买了这么多书,打开率这么低,太不值当,就不买了,这是可以的。有的人继续买书装点门面,同样可以。有的书买来如饥如渴地读完,也挺好。有时候读到一半就不想再读了,并不需要觉得欠谁的。书就是消费品,生活中大部分消费品的价格和效应不是对等的,并非花了多少钱就一定能得到相应的价值。

书是一种消费品,并非花了多少钱就一定能得到相应的价值。买了书不一定会看书,想看和在看是两回事,就像买了 Kindle,不一定会拿起它。很多人在讨论墨水屏的时候,都会说一句:“我也有一个 Kindle”,享受了内心片刻的满足感,紧接着后半句是“我很少用”。

其次,Kindle是以看正版电子书为主(虽然也可以在电脑上通过邮件或者USB传输的方式拷贝离线的电子书到Kindle上,但还是有点太麻烦)。有一点你可能还不知道:在电子书阅读市场,看书的人只是占了很少的比例。更多的人看的是网络小说、都市言情、宫斗权谋、武侠、玄幻、漫画、小黄文等没有版权的内容;这类内容老少皆宜、男女通吃,这类内容的市场和渠道远比你想象中的大和丰富,那就更没有 Kindle 什么事了。

再次,涉及到“专注”的问题。有人说:“阅读器可以让我们在看书的时候更专注”。如果仔细想想会发现:“阅读器让我们更专注”其实是个伪命题。

对于专注的人来说,在任何设备上看书都能看得下去,否则,手机上的微信读书App也不会这么火(目前是月活500W)。对于不专注的人来说,他会左手拿着 Kindle,右手拿着手机。

看纸质书同样有干扰。你读到某个段落时,可能会若有所思地抬头看看窗外的人们嬉笑打闹,可能直接摊在沙发上做葛优躺。

第二个原因(也是最重要的原因):便携和在线,才是未来。阿里云的创始人王坚在他的《在线》一书举了一个很好的例子:

今天,市场上已经几乎没有胶相机了。就算有爱好者在收藏传统胶卷相机,那也是将其当成艺术品,不是通常意义上的消费。数码相机通过数字化,将传统行业做了一次彻底的革命。

1975年,柯达发明了世界上的第一台数码相机;1975年12月,柯达公司的电子工程师史蒂文·赛尚(Steven Sansson)成为世界上第一个拿着数码相机,拍下第一张照片的人。

柯达曾在它的数码相机上配置Wi-Fi功能,算是进一步的改进。但是这种做法没有用,添加Wi-Fi的作用,仅仅是让照片更容易下载到电脑而已,这个东西一定不会有生命力。

而真正带来革命意义的,是手机上的数码摄像头,它随时连接着互联网。一个在线的相机,彻底改变了拍照的形态。现在在外面吃饭时,无论是刚上小学的孩子,还是四五十岁的中年人,都习惯于一上饭桌立马拿手机拍照,然后传到社交网站上。在线相机激发了普通人的创造欲望和分享欲望,所以才有Instagram这类照片分享软件,并在全球掀起浪潮。

2012年1月,拥有131年历史的柯达申请破产。从第一张数码照片到破产申请,只有不到40年的时间。今天,史蒂文的梦想实现了,但柯达却不见了,这也体现了柯达和Instagram的差别。

音乐也经历了这样一个历程。从磁带到CD(激光唱片),从CD到MP3(一种音频压缩技术),我们获取音乐的方式越来越便利。这也遵循了从原子到比特,最后到在线的过程。世界上的很多技术,都是出现没多久,甚至还没和你真正匹配到最佳状态,就已经消失了。比如随身听,这个风靡一时的磁带播放器,还没进化完,就被淘汰了。

在线的前提是便携。阅读器的尺寸大小,接近纸质书的大小,确实可以满足一部分人的需要,但做不到真正的便携。广告里都说阅读器可以很方便地装在口袋里,那得是穿着大衣才行,牛仔裤里是放不下的。

如果做不到真正的便携,意味着使用频次较低。上学、去图书馆、上班或者出差的路上也许会背包,但是排队吃饭、公园散步、临时开会的时候,就很少背包。我还观察到一个现象:很多女生会喜欢随身带着小包,小到只能装下一个手机。你会随身带着手机,但不会随身带着一块砖头。

关于便携的应用场景,一个最经典的案例是就是iPad。我们日常使用最多的是手机,其次是电脑;iPad 只是偶尔用用。iPad 的应用场景填补了手机和电脑的空窗期,当你想要在大屏上做“以阅读、观看、写写画画为主”的事情时,iPad就很适用。

有人说:“阅读器之所以受欢迎,有一个很重要的原因是,阅读器的屏幕比较大,像一本书的大小”。可是,微信读书阅读器的屏幕才6英寸,只是比大多数智能手机的屏幕大一点点,也没见用户吐槽。

一款设备的屏幕尺寸大小,既不是优点,也不是缺点,只是“特点”。小屏或者大屏,都有各自的应用场景,对比下 iPhone、iPad、Mac的使用场景便明了。单从使用频率来看,手机一定是完胜任何大屏设备的。

以上,我并没有否认平板设备的市场价值,我只是从便携和使用频率的角度做探讨。

便携只是一小步,在线才是一大步。

柯达做到了将照片从原子到数字化,却没有做到从数字化到在线化。同样, Kindle 做到了将书籍从原子到数字化,却没有做到从数字化到在线化

阅读并非独自享用,阅读是一种社交活动。在书中看到一段好的段落之后,立马复制、截图、制作成分享图,发到微信群、晒晒朋友圈、分享到社区网站、去豆瓣上看看评分和书评、去笔记软件上整理阅读笔记、去搜索引擎里查相关资料、成为写作素材,以及快速打字并搜索电子书全文,甚至直接把离线的电子书发给朋友。所有的这些操作,Kindle 都做不到,而手机和电脑都能做。

当然,你可能会说:“我端着 Kindle 当纸质书看,总行吧?” 你这不是浪费了电子书的天然优势么?

还有人会说:“术业有专攻,我觉得看电子书就应该用专门的阅读器看”。这样做当然有好处,可以专心只做阅读这一件事;另外一方面也就意味着:如果你想放下手中的阅读器,然后拿起手机做别的事,你会觉得这种切换操作特别麻烦。

更有人说:“我拿起手机就想玩,在手机上看书我没法儿专注”。手机是现代人肢体的延伸,你应该学会如何与手机相处,而不是避开它。当你左手端着Kindle,右手拿着手机聊天的时候,这种感觉如此奇妙。

1984年1月,苹果公司发布了第一款成功的面向大众市场的个人电脑,它拥有图形用户界面、内置屏幕和鼠标,到现在刚好37年过去了。我们早已学会如何跟电脑相处。2007年6月,乔布斯发布了第一款 iPhone 智能手机,它彻底颠覆了移动市场,到现在还不到14年,它还需要一段时间去适应环境。2010年之后出生的小朋友,他们从小就接触了手机,也许,等他们长大后会发现:“沉迷手机”这几个字,只是在儿时常听长辈念叨,他们自己从未有过这样的困惑。

一台能连 Wifi 的设备,算在线么?还不够。一定要同时拥有4G/5G上网和Wi-Fi上网这两个功能。两者的区别在哪里?难道是Wi-Fi上网速度更快、资费更便宜?真正的重点在于是3G/4G而不是Wi-Fi直接推动了移动互联网的普及。

二者最大的区别在于,4G/5G上网只需要一张SIM卡(电话卡),你所有的认证在这一张卡上就能全部实现,这就是好的用户体验。你通过4G/5G上网时,不需要一个显性的装置,也不需要一个连接到网络上的显性动作;而当你通过Wi-Fi上网时,你肯定需要做出输入密码这样的显性动作。在互联网行业,流行这么一个说法:每多一个步骤,就要多损失一半的用户。也就是说,哪怕城市的每个角落都布满了Wi-Fi热点,只要你还是需要输入一堆密码才能通过Wi-Fi上网,那么就会失去一大批用户,无法真正普及联网。

以前,诺基亚手机和塞班系统还流行的时候,人们会买MP3设备听歌、买MP4设备看视频、买收音机听广播、买随身听和磁带听专辑,后来 iPhone等智能手机出现之后,这些设备都消失了。

你完全可以设想一下,原来不在线的东西,只要在线了,会带来什么样的创新,而这种创新会给所在的行业带来什么样的革命。

在人类的发展过程中,许多东西都在进化,能够留下来的东西很少,这体现了适者生存的原则。有的东西比如眼镜、项链、手表、手机,一直没被淘汰,它们还有足够的时间去进化,去适应环境。

当你在拿 kindle 盖泡面的时候,我想到了《动物精神》这本书里的一段话:

资本主义的物产丰富至少有一个缺陷——它并不是自动地生产人们真正需要的东西,而是生产人们认为有需要且愿意为此付钱的东西。如果人们愿意为药品付钱,资本主义就生产药品;而如果人们还愿意为“包治百病”的假药付钱,资本主义就会生产假药。

用户到底想要一款怎样的屏幕?

电子纸最大的优点就是护眼,第二大优点是能达到纸质印刷的效果。

这一段,我想说的是:第二个优点在第一个优点面前,显得微不足道;其他的优点,更是无足轻重。

当初提出电子纸设计理念的人,希望的是“改变人们阅读信息的方式”,而不是想要让这块屏幕看起来多像纸张,大部分信息不是在纸上,也不需要在纸上。护眼才能真正改变人们阅读信息的方式。

虽然现在已经无法考证,但我更倾向于相信:采用墨水屏技术,让墨水屏看起来像纸张,只是技术实现上的一种意外的结果,让刚好热爱阅读的人收获了一份意外的惊喜。至于其他的优点:因为墨水屏是靠反射光让人眼可见,所以自然很省电;因为电子墨水是一种液态材料,所以更轻薄,未来更容易做成可折叠、可弯曲的屏幕。这些优点都是选择电子纸技术的结果,而非原因

没错,护眼就是电子纸最大的发明,我有很多理由来说明这一点。

现在我们用的kindle是反光模式,且有纸质印刷的效果。我们不妨设想一下,假如kindle和手机一样是发光模式,而不是反光模式,那么,即便kindle屏幕看起来再像纸质书,也不会有人买单,因为太刺眼了,还不如直接在手机上看电子书呢。况且,手机屏幕也可以再发明出一种“仿纸张印刷效果”的显示模式,这不是什么难事,此时完全就没kindle什么事了。

我们再设想一下,假如kindle保持反光模式不变,但是屏幕看起来没有纸张印刷模式,这样的kindle会有人买单吗?当然会,因为手机和电脑屏幕做不到反光模式。

有人可能会说:“我在用kindle的时候,不管是白天还是黑夜,一直都是打开背光灯的。”你要知道,电子纸的背光灯,是经过柔性处理的,他的光线要比手机屏幕要暗得多。

电子纸技术直到现在为止一直都很落后,从墨水屏在1997年首次推出,到后来的十年,一直都无人问津。

为什么第一块电子纸的大规模应用场景是kindle电子书市场呢?不是因为墨水屏看起来像纸张,得到了人们的喜爱;而是因为文字显示对色彩的要求是不高的,只要底部是白的,文字是黑的就行。这种潜在的市场机会, 需要一定的外部条件去激发,于是半路冲出来一个亚马逊。亚马逊在2007年推出第一款kindle的时候,之所以能火爆,靠的是亚马逊商城有海量的电子书资源。内容资源+墨水屏,双剑合璧,创造了电子纸得天独厚的应用场景。相比之下,世界上的第一款墨水屏电子书阅读器,不是2007年的kindle,而是2004年索尼公司推出的,但是索尼没有电子书资源,所以这款阅读器接下来的命运注定走向末路。

电子书市场只是电子纸的一个很小的应用领域,电子纸的仿印刷效果,只适用于原本将纸张作为载体的内容;更多的内容载体,并不是纸张。我们的视觉可以再开阔一些,将来,人们希望通过电子纸看手机屏幕、看电脑屏幕、看广告牌,看几乎所有被制造出来的、呈现在眼前的东西。到那时,电子纸领域会涌现出更多的新材料和新技术。由于“电子纸”这个词已经被广泛传播,即便将来它的显示效果看起来不像纸张,人们也会亲切地将其称之为“电子纸”

假设不考虑技术因素,单从使用的角度讲,既然周围的太阳光和灯光可以给屏幕提供光照,已经足够。屏幕本身为何还需要发光呢?这本身就是在浪费能源。

归根结底,用户到底想要一块怎样的屏幕?用户想要的是一块反射式屏幕。说得再通俗一点:用户想要的是一块不发光也能看见内容的屏幕

电子纸的发展现状和预测

到现在为止,我们已经知道,电子纸的技术很落后;电子墨水屏(E-ink)技术是目前唯一投入商用的电子纸技术。

墨水屏的刷新很慢,色彩显示很差劲,有锯齿感,翻页有闪屏、残影。看文字足够,看图片勉强,看视频残废。这就是电子纸目前的使用体验。

电子纸未来的发展会这样?市场上会出现怎样的竞争格局?这一段,我来做个大胆的预测。

这篇文章的发布时间是2021年2月初。做预测时,我大致会以未来三年(2023年)、未来五年(2025年)、未来十年(2030年)作为时间节点。

需要声明的是:

1、以下预测,没有任何科学依据、技术支撑、统计数据,纯粹只是我的个人畅想。如果你觉得不切实际,就当是在看科幻片吧。

2、我的预测有一种悖论:如果我不公开预测,市场可能真的会命中我的预测,但是大家不知道我的预测;如果我公开预测,市场可能会因为看到我的预测而提前采取行动,导致我的预测不准。

未来两年:阅读器之争

从供应链的角度来看,目前的阅读器市场分为三层:

第一层:由台湾的元太科技公司提供 E-ink 屏幕。

第二层:比如文石这样的公司,专注做阅读器。主要做两件事:一是根据 E-ink 屏幕做工业设计,做阅读器硬件(硬件层面);二是做操作系统(软件层面)。阅读器的操作系统是基于 Android 系统定制的,既要做系统裁剪,又要适配E-ink 屏的使用体验,有一定的工作量。由于文石没有自己的书城服务,所以文石阅读器必须要做开放的Android系统,必须要支持安装第三方App。

第三层:比如微信读书、得到、多看、掌阅这样的公司,主要提供数字阅读服务,顺带做阅读器。比如微信读书的阅读器由第二层的厂商提供硬件的贴牌代工。通俗来说就是:微信读书团队想要做一款量身定制的阅读器,于是找文石公司代工。文石公司按照需求改改屏幕尺寸、定制一款开屏软件、加上微信读书的logo,就成了微信读书阅读器。

另外,Kindle阅读器其实是把第二层、第三层的事情都做了(只不过,Kindle是属于封闭的系统)。

第一层显然已经被元太科技公司垄断了,因为 E-ink 是元太独有的技术。这没什么好说的。

第二层提供的阅读器,是比较适合普通用户的。因为,用户可以根据自己的需要,安装不同的阅读类App。

第三层提供的阅读器,主要是给特定的用户群体。比如说,你是微信读书的重度用户,购买它的阅读器是无可厚非的。你可以把“微信读书阅读器”理解为“硬件形式的微信读书App”,它主要是给微信读书的深度用户定制的,不太适合其他的用户人群。第三层,比拼的不是谁的阅读器做得好,而是谁的电子书资源更丰富。

假如说,你是各种阅读App都在用的人,那么,第三层的阅读器显然不适合你。使用微信读书App,然后买个微信读书阅读器?使用得到App,然后买个得到阅读器?这太扯了。建议直接买第二层的阅读器。

当然,你可能会有这样的疑问:“微信读书阅读器虽然不支持安装第三方APP,但是得到阅读器支持呀。我买个得到阅读器,是不是相当于买了文石阅读器?”答案显然是否定的。

我们在评价一个阅读器是否值得买的时候,有一个很重要的指标就是:“这款阅读器是否支持安装第三方App”。支持安装第三方App不一定是优点。

大家想一想,为什么微信读书、iReader这样的阅读器,他们要禁用“安装第三方APP”这个功能?是为了做一个封闭系统然后形成闭环吗?这是一部分原因,但不是主要原因。

最主要的原因是:安装在阅读器上的APP应该是宁缺勿滥的。阅读器不是不想给用户提供这一功能,而是对目前墨水屏上APP的显示效果不满意。绝大部分App在墨水屏上是没有做适配的。

微信图书团队主要做电子书阅读服务,在阅读器操作系统层面的优化上,无能为力。如果用户安装了各种奇奇怪怪的App之后,引发吐槽,微信图书背不起这个锅,也不想惹这样的麻烦。

假如说所有的阅读App都做了墨水屏的适配的情况下,微信读书阅读器如果还是封闭的系统, 那它就不是形成闭环,而是闭门造车。

得到阅读器支持安装第三方App,这就作何解释呢?相信我,在得到阅读器上使用非得到系的App,它的使用体验肯定要比文石阅读器差一些。得到阅读器的目标用户群体,一定是得到App的重度用户。得到公司重点维护的是这群得到用户,而不是阅读器上的操作系统和其他App。

到这里,你应该能明白,为何我在前面说,“微信读书阅读器”本质上是“微信读书的硬件App”

未来两年,会有各种阅读器产品层出不穷(现在就已经是了),频繁出现在大众视野,甚至会出现在地铁站广告牌。但是,应该只有两种阅读器会得到普遍认可:一种是 Kindle 阅读器,因为 kindle 电子书实在太丰富,而且 kindle 阅读器支持导入离线电子书,也不算完全封闭。另外一种是文石这样的阅读器,专注做好阅读器本身的使用体验。至于微信读书阅读器、得到阅读器,它们的品牌宣传价值大于使用价值。

想要做好一款阅读器,需要做好三件事:

  • 1、墨水屏的屏幕要做好(硬件层面)。
  • 2、操作系统要做好(系统软件层面)。
  • 3、应用层的App要做墨水屏的适配(应用软件层面)。

第1件事,只有元太公司能做。第2件事,未来会有更多的厂商加入竞争。第3件事,是当前最应该重视也是最容易优化的,然而目前只有微信读书App和网易蜗牛读书App做了。微信读书有专门的“墨水屏版App”,可以安装在任何支持开放系统的墨水屏设备上,这是一个良好的开始。其他公司只是在自家阅读器上做了墨水屏版App。

微信读书有庞大的用户群体,而且团队背靠大厂,有足够的人力。其他的阅读类App,短期内很难有动力做这样的事。当然,抱有期待,总是好的。

抛开墨水屏本身的体验不谈,我们发现,目前为止,并没有一款足够让人满意的阅读器:

  • Kindle阅读器:拥有海量书库,但系统封闭。
  • 文石阅读器:支持开放的系统,但不提供电子书服务,品牌的影响力有限。第三方App是否愿意在文石阅读器上做适配,是个问题。
  • 微信读书阅读器:提供电子书服务,但系统封闭。
  • ……

我的预测是:未来两年,阅读器市场的竞争会很激烈(因为有多家厂商参与竞争),但是墨水屏阅读器不会流行太长时间,因为墨水屏手机将会结束这场战争。

2023年:墨水屏手机之争

目前来看(2021年初),99%的人买的墨水屏设备都是阅读器,而不是其他的设备,更不是墨水屏手机。

为什么最近几年流行的是墨水屏阅读器,而不是墨水屏手机?因为前面讲过,墨水屏的体验只够看文字。更何况,如果要配备一块质量很好的墨水屏,再配备手机零件,这个价格相当于两部安卓手机的价格,一般人承受不起。

久而久之,用户希望阅读器有很多功能:方便导入离线电子书,支持安装第三方App,支持彩色版、手写功能、朗读功能、指纹识别。如果是在车上看书,用户希望阅读器能安装 sim 卡,方便连接数据网络,随时上网,再往后,希望支持双卡双待、软件双开。

阅读器做着做着,其实就是在朝着手机的方向做(屏幕小点的是手机,屏幕大点的是平板)。但是大家做的标准不一样,智能化的程度不一样,所以出现了五花八门的阅读器,呈现出碎片化严重的阅读器市场。从这一点也能看出,阅读器只是一个中间产物。

这两年,确实有些手机厂商在积极探索墨水屏手机的市场。目前市面上的墨水屏手机有三个品牌:海信、掌阅的F1手机、腾讯阅文集团的口袋阅。

这三个品牌中,最知名的是海信(前文有介绍)。掌阅的F1是跟海信合作的;口袋阅更惨,京东上早已下架。

现在大家用的安卓手机基本都是大厂品牌:华为、小米、oppo、vivo等。一提到海信手机,很多人表示不屑。

为什么手机厂商里的大厂不做墨水屏手机呢?因为大厂擅长的是收割市场,而不是教育市场

在海信、掌阅等小众品牌的推动下,再过两年(2023年左右),等到墨水屏手机慢慢进入大众视野后,大厂就开始进场了。海信的墨水屏手机并没有自己的核心技术,很难以量取胜,海信墨水屏手机未来的发展前景,可能不太乐观。

我做个大胆的预测:不久的将来,最先做墨水屏手机的大厂应该是小米。Kindle甚至都有可能推出墨水屏手机。

墨水屏手机一旦普及,它的产品定位不是让拍照多好看、看视频&打游戏多流畅,而是在护眼的前提下,方便文字&图片的阅读和传播。

达到什么程度才算“普及”?至少要保证阅读电子书的人群里,大多数人都知道它。Kindle早已达到了“普及”的程度。我现在放在办公桌上的海信墨水屏手机,每个路过的同事都会好奇地问我这是什么手机。电梯里的陌生人也同样会问我这个问题,好像我和他们很熟一样。可见墨水屏手机目前仍然是个稀有物种

墨水屏手机一旦普及,软件和硬件市场会产生很多新的变化,比如:

  • 无论是什么类型的App软件,都会专门开发出墨水屏版的App。如果你希望让墨水屏版的App变得种类丰富,只能依靠手机市场(硬件、操作系统、生态)去推动,靠参差不齐的阅读器市场是指望不上的。
  • 没有阅读器什么事儿了。到时,阅读器只会成为一些小众人群的收藏品。
  • 墨水屏的智能平板(属于大屏设备)也会越来越多。

当然,即便将来墨水屏手机流行起来,我仍然觉得,买个专门的墨水屏阅读器,更适合孩子阅读。我更担心的是,到时候就算你想买个好点的阅读器,有钱也不一定能买得到。

墨水屏的电脑显示器会普及吗?很难,因为达不到生产力工具的标准。这一点,我放到下一小段做分析。

2025年:新的电子纸技术诞生

我们知道,电子墨水技术(E-ink技术)是目前唯一投入商用的电子纸技术。墨水屏设备的使用体验,瓶颈在于屏幕,屏幕决定了上限。现在的电子墨水屏(E-ink)技术和体验仍然不是很好,无论是外观还是操作上,和手机比起来像是个老古董。

电子墨水技术从20世纪90年代推出到现在,为何进展如此缓慢呢?我猜测有两个原因:

首先,电子墨水技术已经到上限了,很难再有明显的提升。

其次,E-ink公司在2009年被台湾厂商元太科技公司收购,到现在已经12年了,是元太的进展太慢了。从过往现象来看,很多科技创新,尤其是从零到一的创新,大多是国外公司的成果,国内公司更擅长利用人口优势做规模经济。

以上两个原因纯粹只是我的猜测,没有任何根据。如果这两个原因属实,那么,与其指望 E-ink 技术,倒不如另辟蹊径,重新发明全新的电子纸技术。

由于“电子纸”这个词已经被广泛传播,即便将来新技术的显示效果看起来不像纸张,人们也会亲切地将其称之为“电子纸”。

这种全新的电子纸技术是什么我还不知道,应该会在2025年左右诞生。到时,会引发无数人对未来的无限遐想,也就是我接下来想要说的。

2027年:各种电子纸智能设备(包括大屏显示器)开始普及

想要让电子纸的自能设备多样化,首先要有成熟的电子纸技术。除了色彩显示稍微逊色一点点之外,在其他方面的使用体验,必须要对标现在的LED屏幕。护眼、阅读舒适、高分辨率、高刷新率、清晰流畅、省电节能、超薄、轻便等等,一样都不能少;可折叠、可弯曲也会成为电子纸独特的优势。

2027年左右,市场上首先普及的是电子纸手机,其次是电子纸平板。只有电子纸技术成熟之后才能量产,量产之后价格才能降下来。价格降下来之后,电子纸的大屏显示器才能得到普及。

上面这张图是我现在的工位。MacBook Pro、双屏显示器、机械键盘、两部手机(iPhone做主力机,Android手机做测试),安静写代码时的AirPods Pro降噪耳机,这些都是前端码农必备。

Mac电脑可以说是设计师和前端工程师的必备,因为Mac屏幕对网页的显示效果,还原度更高。等到墨水屏显示器普及后,我可以将其作为Mac的扩展显示器。在墨水屏显示器上写代码&写作&看文档,用Mac屏幕开发网页&看图片&看视频,简直完美。

时间线往后拉,随之进入千家万户的是:配备墨水屏的智能家居设备。智能家居设备的屏幕显示,要求不高,能看到内容、可点击就行,不需要多明亮,色彩不需要多饱满。你可以想象这样一种场景:半夜起床在墙上屏幕上调节空调温度,你当然希望屏幕的光线尽可能柔和。

智能家居还谈不上智能。第一块智能屏幕在电脑上,这是互联网的时代;第二块智能屏幕在手机上,这是移动互联网的时代;第三块智能屏幕,将来会出现在车里,这是智能驾驶和万物互联的时代。当前的你肯定有这种感受:坐在车上玩手机或者看其他电子屏幕,会有点眩晕,因为车相对人不是绝对静止的。让电子纸屏幕出现在车里,是我们需要的。

柔性屏、折叠屏在现在的LED屏幕上都有尝试,但华而不实。这些特性很有希望在电子纸上大放异彩。

墨水屏

2030年:电子纸在各个行业大规模应用

除了智能设备之外,电子纸会应用在其他各个行业。

印刷、平面设计、广告牌、地铁站海报、价格标签、商品包装等各种产品,都能看到电子纸的身影。

就拿电子纸广告牌来举例,这种广告牌可以理解成一种大型U盘,通过数据线或者wifi,将其接上电脑。电脑将图片或者视频拷贝给广告牌,就能立即在在大屏上显示。或者将广告牌接入互联网,直接远程控制广告牌展示的内容。

商品包装为何需要电子纸呢?现在的商品包装,都是密密麻麻的小字,看着费劲。贴上薄薄的、可弯曲的电子纸之后,商品包装可以支持页面滑动,在有限的屏幕上承载更多的内容。

电子纸的大规模应用,最让人收益的自然是教育领域和办公领域。

学习资料的打印频率会变低,取而代之的是在A4大小的电子纸里存放资料。当然,你肯定还会偶尔走进打印店。因为纸张便宜,还可以摊开,而屏幕却只有一块。

高考等大型考试也将采用电子纸答题。

到了2040年,所有能展示信息的地方,都会出现电子纸。

电子纸让人有哪些变化?

《为真实的世界设计》一书中这样解释“设计”一词:

设计,就其根本意义而言,是一种“人与理想世界的现实关系”的构建。设计本身不能创造什么,它所创造的或者说它所提供的,只是人与外部世界交互相互的一种可能性,一种改变生活方式的提案和隐含在其中的某种创造性态度。

光预测电子纸的未来是不够的,我们还应该思考电子纸带给我们的价值和影响,并设想⾃⼰在未来所要扮演的⻆⾊。

电子纸对人有哪些影响呢?至少有以下几个方面。

注意力回归

现在很多人都说:“能耐心阅读文字的人越来越少,他们都去看不需要怎么动脑的视频了。”

TK教主的上面这段话,咋一看很有道理,现在主流的观点也都说是这么说的,但我却不认同。

一个读了十几年书、面对了十几年书本的人,跑到手机和电脑上看文字,怎么就突然没耐心呢?我怎么也不信。

那到底是什么原因导致了大家的误解呢?连续在墨水屏手机上看了几个月的文字后,我找到了一个有说服力的答案。

我们在看文字的时候,是逐行看的,因为手机和电脑的屏幕光线,对眼睛产生了直接的干扰,进而影响了人的专注力。人在长时间盯着某一处看的时候,眨眼的频率和眼球运动的频率会降低,在屏幕光线照射的情况下,眼睛会很累。

但是在看视频的时候,不会长时间盯着某一处看,看的是整体,中间有那么几个瞬间不看也没关系。这就是为什么我们可以轻松做到边吃饭边看剧(视频里的声音也可以填补视频的连贯性),但是边吃饭边看书就挺费劲。

眼睛盯着屏幕看的时候,看局部比看整体要累,还有一个典型的例子可以说明这一点。你可以做一个简单的实验,就是:眼睛一直盯着电脑屏幕的某个位置不动(可以眨眼,但别换位置),看看是什么感受?还没三分钟,你眼睛估计就受不了。

我会经常用PS、CorelDRAW等设计软件,我也会经常用 VS Code等软件写代码,一个明显的感受是,用设计软件的时候,眼睛更难受,时不时还得闭目养神一会儿。设计师们在修图的时候,想必深有体会。

为什么现在的网络文章都是隔几句就换一行?就连很长的微信消息,也是建议大家多换行。是大家没耐心看文字吗?非也,只是因为密集的文字在发光的屏幕上看着难受。纸质书上是不存在这个问题的。

如果在不该换行的地方换了行,会影响段落大意,这不是一个好现象。电子纸的普及,可以避免这个问题。准确来说,电子纸不是让人们的注意力回归了,而是让人们的注意力回到了原有的状态

文字消费市场回归

单从获取信息的效率来看,看文字比看视频快三倍,比听音频快五倍。整体预览、跳读、速读、扫读、全文检索、SEO、复制部分内容、整理、归档、传播,这些都是文字的天然优势,甚至在手背上、墙上、沙滩上都可以写字。

现在有很多视频访谈节目,都出了书,满足不同人群的需要,这是个好现象。相反,如果把文章转成字幕念一遍,再配上不痛不痒的画面凑成视频,这就是在制造内容垃圾。

2020年,在小宇宙App的助力下,播客节目大火。播客作为一个小而美的信息源,里面的内容是真的优质,而且可以连接到很多有趣的人和事物,文字和视频很难有这种魅力。有个问题是,播客内容的生产端在增加,消费端并没有增加,因为听音频的方式虽轻松,但获取信息的场景较少,效率较低。所以,有那么一群人正在研究“怎么把音频内容自动转成文字”。

字节跳动公司最近推出的「飞书妙记」软件,就是一款语音自动转文字的效率神器,而且还能划重点,智能分析,更神奇的是,拖动音频的进度条之后,会自动跳转到对应的文字位置。这个创新,可以很好地帮助我们做音频剪辑,以及会议后的复盘。

电子纸让人们看文字的时候会更舒适。文字的消费市场,是经久不衰的,未来会迎来新的变化。

不再沉迷

手机是肢体的延伸。在过去的一年里,我们每天都在坚持做的事就是给手机充电。出门不带手机,仿佛失联。

家长经常不让孩子玩手机、玩电子游戏,有一个很大的原因是,沉迷手机会影响视力和身心健康。

智能手机对人的影响,可以看看下面这张图:

可是,当我在拿着电子纸设备看书时,其实也是一种沉迷,“沉迷学习,日渐消瘦”。换句话说,当我拿着平板时,无论是在看书还是在玩游戏,这在小朋友看来并没有什么区别。

就像好友@Elizen所说:他们是纯粹的屏幕一代,那就应该学会如何与之共处。

电子纸普及后,我们需要重新审视“沉迷”这个词。

助力无障碍阅读

现在有很多软件在做“无障碍”、“适老化”等方面的体验优化,给信息障碍的人群带来福音。

还有一群人,并不是真的遇到了信息障碍,他们可以正常看屏幕和操作软件,只是无法长时间盯着屏幕看,所以不得不通过“听音频”或者“让别人转述”的方式来代替阅读。

电子纸就是一个很好的无障碍解决方案。

虚拟和现实达到很好的平衡

“电子”是虚拟的,“纸”是可触摸的实体。“电子纸”是虚拟还是现实呢?它让虚拟和现实达到了很好的平衡。

虚拟和现实有时并没有严格的界限。近视眼镜就是一种很成熟的增强现实的产品,你所看到的真实世界会和眼镜投射出的影像叠加在一起。

李如一在《明日世界生存指南》中写道:

在二零二零年的今天,手机里的世界并不比真实世界虚拟多少。且不说那些最终和线下活动对接的手机服务,就算是完全发生在线上的,如果它是妳终日关注和思考的事,为什么会是虚拟的呢?

不可知之地

以上的种种预测和分析,都是基于现有的认知,是在电子纸尚未普及的情况下。等真正到了电子纸普及的时代,人们阅读信息的方式以及生活方式会出现翻天覆地的变化,将“彼时”的预测,和“此时”的预测做对比,必然是颠覆性的差异。

我将“彼时”的时空,称为“不可知之地”。其真实情况不为世人所知,但却为世人所仰望。

为什么会有这篇文章?

这篇文章之所以能够诞生,是因为我对很多方面有关注和经历:

  • 热爱阅读
  • 折腾各种电子书阅读的方式和工具
  • 利用996加班之余,写写文章,分享个人收获。
  • 我的本职工作是写代码,需要经常对着电脑和手机。
  • 关注各种阅读软件的产品体验和优化,热衷于找bug。
  • 对设计方面有一些了解,有基本的审美。
  • 我会把好看的公众号文章整合起来,自己制作电子书,然后在电子纸设备上集中阅读。
  • 我喜欢和互联网上小而美的内容创作者,学习交流。当大家在看电子纸的测评文章时,而我在看是谁写的。
  • 我写的文章虽然小众,但谈及的话题不小众。因为我更关注某件事物对普通人来说是否实用。
  • 我用了五年的Kindle,用了三个月的墨水屏手机。如果不是用了墨水屏手机,我不会有这么多思考。
  • 我有400度近视,格外关注护眼。

当所有的这些因素交织在一起,就是你所看到的这些。这些看法无论优劣,都是我在写的那一刻内心真正相信的。目的不在于求认同,而是提供不一样的见解和思考。

你也可以有你自己的看法。我们的每一次表达,都是在优化这个世界。

十年后,当你在一款舒适的电子纸屏幕设备上,再回过头来重温此文时,应该会感受到另一种惬意。

最后一段

科幻大师阿瑟·克拉克爵士说:“任何足够先进的技术,初看都与魔法无异。”的确如此。我们今天想象不到的技术和产品,正在某处的实验室里缓缓成型,酝酿着下一次闪亮登场。

电子纸超脱了传统“纸”的内涵,也同样跳出了概念中的纸张使用范畴。在未来,电子纸技术完全可能成就新一代的电脑、手机,取代广告牌、路标、海报、价格标签,替换风挡玻璃和落地窗,出现在任何需要显示的地方,甚至是衣服或者眼镜上。它带来的革命不仅仅在传统出版和印刷行业,它可以无处不在。

七牛云+PicGo+Typora配置图床

作者 千古壹号
2020年9月22日 22:51

七牛云图床-配置SSL证书

1、购买证书

进入“管理控制台”,左侧菜单栏选择“SSL证书服务”:

如上图所示的选项,点击“购买证书”,即可免费购买:

2、补全信息

如上图所示,购买成功后,选择“补全信息”,然后填写域名信息、公司信息、联系方式:

如果不知道公司信息和联系方式,就随意填。

3、DNS解析

七牛云的免费SSL证书申请下来之后,我们按照上面的横线处的参数,去域名注册网站(我是在阿里云买的域名)做DNS配置:

然后回到七牛云的刚刚的界面,点击“检测验证结果”,SSL证书就申请成功了:

(4)使用免费证书。

回到七牛云的控制台,选择“CDN-域名管理”:

上图中,开启https配置,然后点击“确认”。之后,输入七牛云账户的密码,即可提交成功,等待审核:

稍等片刻之后,我们的七牛云图床,就自动开启了https:

大功告成。从此以后,在七牛云上的图片url,无论是以http开头,还是以https开头,就都能打开了。

七牛云-设置图床防盗链

为了防止恶意刷流量,我们还需要为自定义域名或者存储桶配置防盗链。防盗链可以在 CDN 控制台配置,也可以在存储桶控制台配置。CDN 的防盗链先执行,存储桶后执行。

开启防盗链的步骤

image-20210630212303864

上图中,选择“cdn–>域名管理–>配置”,之后出现如下界面:

image-20210630212432888

image-20210630212622849

上图中,「允许空 Referer」的意思是:是否允许从浏览器输入图片网址直接访问,或者本地程序访问。如果勾选拒绝,则本地程序无法读取图片,在浏览器中输入图片网址会返回 403。

参考链接:

数据对比

未开启防盗链之前,我的图床,每月请求量是60W次,每天请求量是2W次。

image-20210630211901129

光是一个图床,每月就要花我近30元大洋,非常心痛:

image-20210630212026820

开启防盗链之后,数据待更新:

参考链接

hexo 博客的常见配置

作者 千古壹号
2020年9月21日 11:53

hexo常见命令

新建文章草稿

Hexo 提供了 draft 机制,草稿里将建立在 source/_drafts 目录下。当执行 hexo generate 时,并不会将其编译到 public 目录下,所以 hexo deploy 发布之后,草稿不会显示在页面中。

新建草稿:(草稿不会显示在页面中)

1
hexo new draft <title>

本地预览草稿:

1
$ hexo S --draft

Hexo server 提供了 --draft 参数,搭配 hexo-browsersync 这个插件,就可以一边编辑 markdown 文章,一边使用浏览器预览。

新建一篇文章

新建的文章,会自动存放在 source/_posts目录下。

新建文章:

1
hexo new  "my-article"

本地预览:

1
hexo serve

新建文件夹blog,然后初始化项目:

1
2
3
cd blog
hexo init
npm install

Hexo 自动部署和发布

我们可以在本地新建一个 xxx.md 文件放在 blog\source\_posts 目录中。然后在本地的blog目录下,执行如下命令,就可以将文章发布到服务器端了:

方式1:

1
2
3
hexo clean
hexo generate
hexo deploy

方式2:

1
2
3
hexo cl
hexo g
hexo d

方式3:

1
hexo cl && hexo g && hexo d

hexo 文章格式

文章格式是选填的,不是必须的;但最好加上尽可能多的文章格式,让文章的信息更完整。

hexo 文章的简略格式

1
2
3
4
5
6
7
8
9
---
title: 我是文章标题
date: 2020-09-19 11:30:30
author: qianguyihao
categories: 我是分类
tags:
- 标签1
- 标签2
---

hexo 文章的较完整格式

1
2
3
4
5
6
7
8
9
10
---
title: 我是文章标题
date: 2020-09-19 11:30:30
author: qianguyihao
urlname:
categories: 我是分类
tags:
- 标签1
- 标签2
---

hexo 文章模板的自定义

每次使用 hexo new "my-article"新建一篇文章时,默认只有title、date、tags这几个属性。

我们可以修改scaffolds/post.md文件,自定义文章格式的模板,我修改后的内容如下:

1
2
3
4
5
6
7
8
9
---
title: {{ title }}
date: {{ date }}
update: {{ date }}
author:
urlname:
categories:
tags:
---

hexo 文章的全部属性

参考链接:https://www.dazhuanlan.com/2019/11/30/5de154d0810af/

自定义文章的url地址

(1)修改 hexo/_config.yml 文件:

1
2
#permalink: :year/:month/:day/:title/
permalink: :urlname/

(2)然后,我们就可以单独在具体某篇文章里的头部,通过 urlname字段 自定义这篇文章的url了:

1
2
3
4
5
---
title: 我是文章标题
date: 2020-09-21 11:53:36
urlname: xxx-url
---

参考链接:

给hexo博客生成RSS订阅

(1)在 hexo 项目根目录下执行如下命令:

1
npm install hexo-generator-feed --save

(2)在 hexo 根目录下的 _config.yml 文件中添加如下配置:

1
2
3
4
5
#订阅RSS
feed:
type: atom
path: atom.xml
limit: false

(3)在 theme 目录下的 _config.yml 文件中添加如下配置:

1
rss: /atom.xml

添加上面这行之后,就可以确保在网站的菜单栏展示出“RSS”这几个字(也就是说,露出了RSS订阅的入口)。

当然,你也可以把RSS订阅的入口放在“社交图标”的位置。不同的主题,配置方式不同。比如,就拿hexo-theme-melody主题来说,它的配置方式很简单,在melody主题的 _config.yml 文件中配置如下内容:

1
2
social:
rss fa: https://qianguyihao.com/atom.xml

(4)重新编译,生成博客的静态文件:

1
hexo clean && hexo g

此时,在 public 文件夹中会自动生成一个 atom.xml 文件。

这个atom.xml 就是的 RSS 订阅文件了,以后只需要访问 qianguyihao.com/atom.xml 就可以实现 RSS 订阅了。

参考链接:

hexo-theme-melody 主题配置

官方文档:https://molunerfinn.com/hexo-theme-melody-doc/zh-Hans/

图片无法自适应的问题

解决办法:https://github.com/Molunerfinn/hexo-theme-melody/issues/285

接入 Google Adsense

配置 melody.yml文件:

1
2
3
4
5
google_adsense:
enable: true
js: //pagead2.googlesyndication.com/pagead/js/adsbygoogle.js
client: ca-pub-1601618516206303
enable_page_level_ads: true

常见问题积累

nginx 重启失败

修改nginx后,重启nginx:

1
2
3
4
5
6
7
8
9
# 修改nginx
cd /usr/local/nginx/conf
ls
vim nginx.conf

# 重启nginx
cd /usr/local/nginx/sbin
ls
./nginx -s reload

结果提示下面这个错误:

1
2
[root@iZw9 sbin]# ./nginx -s reload
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)

进入到logs目录发现确实没有nginx.pid文件。

解决办法:

使用指定nginx.conf文件的方式重启nginx:

1
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

此时去logs目录下查看发现nginx.pid文件已经生成了,而且也完成了自动重启的事情。

hexo+阿里云搭建博客网站

作者 千古壹号
2020年9月19日 19:00

2020-09-19折腾时间:

  • 15:15~18:00
  • 20:45~22:15
  • 23:50~00:20

经过5个小时的折腾(含笔记整理),输入公网ip之后,终于可以打开自己的博客网站了。

一、本地安装Hexo环境

1、安装 git 环境

2、安装Node.js环境

3、安装 Hexo,并初始化项目

安装 hexo:

1
npm install -g hexo-cli

新建文件夹blog,然后初始化项目:

1
2
3
cd blog
hexo init
npm install

初始化完成后,blog文件夹内包括如下内容:

在blog文件夹内安装插件:

1
2
npm install hexo-deployer-git --save
npm install hexo-server

在blog文件夹内,配置git提交的账号邮箱:

1
2
git config user.email "youremail@mail.com"
git config user.name "yourname"

4、新建一篇文章

新建文章:

1
hexo new  "my-article"

新建的文章,会自动存放在 source/_posts目录下。

然后,我们可以开始在 source/_posts/my-article.md 文件里,写 markdown 格式的文章了。

5、在本地预览项目

输入如下命令,在浏览器预览项目:

1
2
3
4
5
6
7
$ hexo server
或者
$ hexo s

INFO Validating config
INFO Start processing
INFO Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.

在浏览器输入 http://localhost:4000 ,就能看到 Hexo 的默认主题下的主页了:

至此我们就完成了在本地的配置工作。

二、域名注册、服务器购买

1、域名注册

2、购买阿里云服务器 ECS

进入阿里云主页 https://www.aliyun.com/,点击“云服务器ECS ”进行购买:

购买服务器ECS时,可以选择如下配置:

  • 地域:选择离经常访问你网站的用户近一些的地域
  • 内存:1G
  • 云盘:40G
  • 网络:专有网络
  • 公网IP:包含
  • 带宽:1Mbps

按照上面的配置,2020-09-19这天的价格如下:

  • 一年:700
  • 三年:1600

我选择了三年的。

3、域名备案

域名备案时,需要先准备一个ECS服务器,我们可以直接用上面购买的服务器。

备案时间较长,请耐心等待。

三、阿里云ECS配置

重置实例密码

由于 ECS 服务器对 root 用户没有设置初始密码,因此我们需要对 root 密码进行重置:

温馨提示:记得妥善保管自己的 root 用户密码哦。并且在搭建的过程中如遇到不可挽回的局面可以考虑重置 ECS 实例,相当于重装系统。操作如下:

设置安全组

阿里云的服务器默认不开放端口号,这样使得我们在网站部署完成之后仍然无法访问。

有一个基本原因是没有开启端口号,因此我们需要新建安全组并添加 80 端口,再将安全组添加到 ECS 实例中。具体操作如下。

在控制台的 ECS 实例中点击「网络与安全–>安全组–>创建安全组–>快速添加」。在访问规则的入方向添加如下几个端口(尤其是80端口):

然后回到 ECS 服务器实例,将刚刚配置的安全组加入到实例中:

备注:安全组的出方向不用配置,默认对外都是放行的。

四、服务器端配置

此步骤是博客搭建过程中最容易出错的地方,提出以下几点建议:

  • 为了避免出错,推荐直接复制粘贴命令行代码。
  • 分清是在本地计算机上操作,还是连接服务器在服务器上操作。
  • 分清在服务器上使用 Git 用户还是使用 root 用户进行操作。

本地通过 ssh 连接服务器

我用的是Mac电脑,推荐使用 Royal TSX 软件进行ssh连接。

参考链接:在Mac上使用Royal TSX,替代 xshell 和 item2、SecureCRT,可以 SSH 也能 FTP

(如果你用的是 Windows电脑,推荐使用Xshell软件进行ssh连接。)

安装 nginx

参考链接:centos8平台编译安装nginx1.18.0

我们使用 nginx 作为 web 服务器和反向代理工具。

(1)安装 nginx 依赖环境(安装期间有提示一律选 yes):

1
2
3
4
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel

(2)下载 nginx 安装包:

1
wget -c https://nginx.org/download/nginx-1.18.0.tar.gz

将安装包解压到 /usr/local 目录下:

1
tar -zxvf nginx-1.18.0.tar.gz -C /usr/local

(3)进入 /usr/local 目录,确认 nginx 解压到该目录下:

1
cd /usr/local

进入 nginx-1.18.0 目录,会发现该目录下有一个 configure 文件,执行该配置文件:

1
2
3
cd nginx-1.18.0/
ls
./configure --prefix=/usr/local/soft/nginx --with-http_stub_status_module --with-http_ssl_module

解释:

  • –prefix 指定安装路径

  • –with-http_stub_status_module 允许查看nginx状态的模块

  • –with-http_ssl_module 支持https的模块

编译并安装 nginx:

1
2
make
make install

(4)查找nginx安装目录:

1
2
$ whereis nginx
/usr/local/nginx

进入安装目录:

1
2
3
4
$ cd /usr/local/nginx
$ ls
# 有下面这几个文件
# conf html logs sbin

由于 nginx 默认通过 80 端口访问,而 Linux 默认情况下不会开发该端口号,因此需要开放 linux 的 80 端口供外部访问:

1
/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT

(9)进入 nginx安装目录的sbin 目录,启动 nginx:

1
2
3
cd /usr/local/nginx
cd sbin
./nginx

没有任何消息,代表启动成功。此时输入公网 IP 即可进入 nginx 的欢迎页面了:

备注:注意要保证 nginx 服务处于 运行状态 才可以访问博客网站。nginx 相关命令如下:(在 cd /usr/local/nginx/sbin 目录下执行)

1
2
3
4
5
6
7
8
9
10
cd /usr/local/nginx/sbin

# 停止 nginx 服务
./nginx -s stop

# 启动 nginx 服务
./nginx

# 重启 nginx 服务
./nginx -s reload

配置 nginx 路由

(1)为 hexo 创建一个部署目录 /home/www/hexo

1
mkdir -p /home/www/hexo

(2)进入 /usr/local/nginx/conf 目录,并对 nginx.conf 配置文件进行相关配置:

1
2
3
cd /usr/local/nginx/conf
ls
vim nginx.conf

打开nginx.conf文件后,按 i 键由命令模式切换到编辑模式,修改三个地方:

  • 首先将最顶端的用户改为 root。
  • 其次,将 server_name 改为自己的域名。如果没有备案,可以先填写自己的公网 IP(在阿里云控制台的 ECS 实例中查看),访问时暂时用公网 IP 进行访问。
  • 最后,将location中的 root 项中的值改为 /home/www/hexo;。如果 server 中的端口号不是 80,则改为 80

修改结束之后,先按 Esc 由编辑模式切换到命令模式,再输入 :wq 命令保存并退出编辑器。

nginx.conf 修改前:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#user  nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;


events {
worker_connections 1024;
}


http {
include mime.types;
default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

#gzip on;

server {
listen 80;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root html;
index index.html index.htm;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}


# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;

# location / {
# root html;
# index index.html index.htm;
# }
#}


# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;

# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;

# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;

# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;

# location / {
# root html;
# index index.html index.htm;
# }
#}

}

修改后:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
user  root;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;


events {
worker_connections 1024;
}


http {
include mime.types;
default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

#gzip on;

server {
listen 80;
server_name www.qianguyihao.com;
return 301 https://www.qianguyihao.com$request_uri;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root /home/www/hexo;
index index.html index.htm;
}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}


# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;

# location / {
# root html;
# index index.html index.htm;
# }
#}


# 开启 HTTPS
#
server {
listen 443 ssl;
server_name www.qianguyihao.com qianguyihao.com;

ssl_certificate /usr/local/nginx/cert/4523958_www.qianguyihao.com.pem;
ssl_certificate_key /usr/local/nginx/cert/4523958_www.qianguyihao.com.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location / {
root /home/www/hexo;
index index.html index.htm;
}
}

}

需要修改的位置如下:

修改nginx后,重启nginx:

1
2
3
cd /usr/local/nginx/sbin
ls
./nginx -s reload

安装 node.js

安装 node.js的命令如下:

1
2
3
cd ~
curl -sL https://rpm.nodesource.com/setup_10.x | bash -
yum install -y nodejs

过查看版本号验证是否安装成功:

1
2
node -v
npm -v

效果如下:

在服务器端创建 Git 用户

为了使我们能够在本地向服务器实现自动部署,需要在服务器端另外新建一个 Git 用户。然后使用公钥连接成功之后,就可以方便地随时进行自动部署了。

执行如下命令,在阿里云安装git环境:(有提示时,选择 yes 即可)

1
yum install git

安装结束之后,通过查看版本号验证是否安装成功:

1
2
$ git --version
git version 2.18.4

创建 Git 用户:

1
adduser git

修改 Git 用户权限为 740:

1
chmod 740 /etc/sudoers

在配置文件中增加 Git 用户。首先打开文件:

1
vim /etc/sudoers

进入文件后,后按 i 键由命令模式切换到编辑模式。如下图所示,在 root 下添加一行 Git 信息:

修改结束后,先按 Esc 由编辑模式切换到命令模式,再输入:wq 命令保存并退出编辑器。

将 Git 用户的权限改回去:

1
chmod 400 /etc/sudoers

设置 Git 用户密码:

1
2
3
4
5
$ sudo passwd git
更改用户 git 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

以上我们就完成了 Git 用户的创建,接下来我们向 Git 用户添加公钥,就像配置 Github 那样。

给服务器端的 Git 用户配置 ssh 公钥

这样做的目的就是,以后由本地向服务器提交资源,就不需要再进行身份验证了。

流程大致如下:

  • 先在本地的C:\Users\用户名.ssh目录生成公钥id_rsa.pub和私钥id_rsa
  • 然后使用 FTP 上传工具,将公钥文件id_rsa.pub上传到服务器端的 .ssh 文件夹;
  • 最后将公钥文件id_rsa.pub内容拷贝到 authorized_keys 文件中。

温馨提示:使用 ctrl + c 复制命令,然后在终端点击右键就可以直接粘贴上去了,避免手动输入的麻烦。

如果你之前配置过公钥到 Github、Gitlab 等仓库,那你直接使用之前的公钥即可。

另外,我们要注意在本地操作还是在服务器端操作;在服务器端的时候,是使用 root 用户还是使用 git 用户操作。

(1)在服务器端切换到 git 用户,在根目录下创建 .ssh文件夹:

1
2
3
su git
cd ~
mkdir .ssh

此时,命令行信息中的 # 变成了 $,且 root 变成了 git,表示我们切换成功。

(2)在本地生成生成公钥、私钥:(注意是在本地)

1
2
3
4
5
$ cd ~
$ cd .ssh
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/smyhvae/.ssh/id_rsa):

上面的命令中,如果有询问,直接回车即可。结束之后,会在 C:\Users\用户名\.ssh 里生成两个文件:公钥文件 id_rsa.pub、私钥文件id_rsa

注意,.ssh 为隐藏文件夹,你可能需要显示隐藏文件夹之后才可以看到。

(3)在本地终端输入以下命令,为私钥设置权限:

1
2
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa

(4)使用ftp工具,将本地的 id_rsa.pub 文件上传到服务器端的/home/git/.ssh目录下:

在使用ftp工具登录远程服务器时,登录项如下:

  • ip:公网ip。
  • 端口:22
  • 协议:sftp
  • 用户名:git
  • 密码:xx

注意,此时服务器端 .ssh 文件夹里还没有 authorized_keys 文件,只有 id_rsa.pub 这一个文件。

(5)回到 服务器端,以 Git 用户身份在 .ssh 文件夹内新建 authorized_keys 文件,并将公钥内容拷贝到该文件中:

1
2
3
cd ~/.ssh
cp id_rsa.pub authorized_keys
cat id_rsa.pub >> ~/.ssh/authorized_keys

修改文件权限:

1
2
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

(6) 确保设置了正确的SELinux上下文:

1
restorecon -Rv ~/.ssh

现在我们来验证一下,在本地输入如下命令,是否能正常连接到远程服务器:(不用输入密码,就能直接连上)

1
ssh -v git@xxx.xxx.xxx.xxx(你的公网 IP)

如果显示欢迎界面,表示本地连接远程服务器的git用户时,连接成功:

但是我们一般不使用 Git 用户进行服务端操作,而是使用 root 用户。Git 用户只是作为自动部署特意新建的。

比如说,在本地输入如下命令,可以连接远程服务器的root用户:(需要输入密码)

1
ssh -v root@xxx.xxx.xxx.xxx(你的公网 IP)

在服务端配置 Git 仓库

(1)在服务器端使用 Git 用户 创建 git 仓库,并新建 post-receive 钩子文件:

1
2
3
4
5
6
7
8
9
su git
cd ~
sudo git init --bare hexo.git

# 新建文件
touch ~/hexo.git/hooks/post-receive

# 修改文件权限
chmod +x ~/hexo.git/hooks/post-receive

备注:注意ls、touch、cat、vi/vim的区别。

输入如下命令编辑文件:

1
vim ~/hexo.git/hooks/post-receive

进入文件后,后按 i 键由命令模式切换到编辑模式。输入以下命令:

1
git --work-tree=/home/www/hexo --git-dir=/home/git/hexo.git checkout -f

修改完成后,先按 Esc 由编辑模式切换到命令模式,再输入 :wq 命令保存并退出编辑器。

(2)在服务器端使用root用户,修改文件权限:

1
2
3
su root
cd ~
sudo chmod -R 777 /home/www/hexo

(3)重启 ECS 实例。

到此,我们就完成了服务端的配置。

五、hexo本地部署和发布

本地 Hexo 配置连接和域名

主要是修改 _config.yml 文件。进入本地计算机 blog 文件夹的根目录,找到 _config.yml 文件并打开。

(1)把 deploy 参数改成如下方式:(注意,xxx 的地方是填写你自己的公网 IP )

1
2
3
4
deploy:
type: git
repo: git@xxx.xxx.114.110:/home/git/hexo.git
branch: master

(2)URL 配置项需要改为自己的域名:(如果没有备案,则可以先填写公网 IP)

1
url: http://www.qianguyihao.com

Hexo 自动部署和发布

我们可以在本地新建一个 xxx.md 文件放在 blog\source\_posts 目录中。然后在本地的blog目录下,执行如下命令,就可以将文章发布到服务器端了:

方式1:

1
2
3
hexo clean
hexo generate
hexo deploy

方式2:

1
2
3
hexo cl
hexo g
hexo d

方式3:

1
hexo cl && hexo g && hexo d

此时,在浏览器中输入自己的公网 IP,你就可以打开你的博客网站了。惊不惊喜?意不意外?

备注:在浏览器中输入自己的公网 IP之后,如果网站打不开,请记得检查之前的步骤是否正确,尤其是检查一下 nginx 服务是否已经启动。

域名DNS解析

当我们的域名备案成功之后,我们就有能力使用域名登陆自己的博客了。在此之前,需要在阿里云 控制台-域名 中设置域名解析。

点击“解析”:

在DNS解析设置里同时添加两条指向公网ip的主机记录:一条@记录,一条www记录。如下:

此时,在浏览器输入www.qianguyihao.com或者qianguyihao.com,就可以打开我的博客网站了。它们都是基于http协议的,等同于http://www.qianguyihao.com

将网站域名支持https

在上面的步骤中,网站域名只支持了 http,还没有支持https。所以,当我输入https://www.qianguyihao.com时,网站是不打开的。

那要怎么让网站域名支持 https呢?我们可以为域名添加免费证书,添加证书后,网站将变成安全的 https。

整体流程如下:(图1)

整体流程如下:(图2)

具体配置步骤如下。

购买免费证书

在阿里云主页搜索 SSL证书,然后点击“立即购买”:

按照下图所示的选项进行选择,可以看到证书是免费的:

按照步骤的流程点击之后,域名解析里会自动多出下面这一条解析:

下载证书

解析完成后,马上会收到两条短信:

短信1:

1
【阿里云】尊敬的smy****@163.com:您为域名www.qianguyihao.com购买的SSL证书已签发成功,现可前往 SSL证书控制台 下载并安装至Web服务器或一键部署到阿里云云产品,详情可参考https://c.tb.cn/I3.ZW3uZ,如需人工帮助请拨打95187-2。

短信2:

1
【阿里云】尊敬的smy****@163.com:您的云盾证书服务实例:cas-cn-xx 开通成功。请登录云盾证书服务控制台查看及管理。

备注:阿里云控制台网址:https://console.aliyun.com

由于我们的 web 服务器是 ngxin,因此下载时选择 nginx:

在服务器端安装证书

(1)按照上面的步骤下载完成后,会得到一个xxx.zip压缩包,将压缩包解压后,会看到两个文件:452xxx_www.qianguyihao.com.pem452xxx_www.qianguyihao.com.key

(2)连接服务器,以 root 用户进入 nginx 配置页面:

1
cd /usr/local/nginx/

创建 cert 文件夹用来存放证书:

1
2
mkdir cert
ls

然后使用ftp工具将刚才的两个证书文件上传到 cert 文件夹。

修改 nginx 配置文件:

1
2
cd /usr/local/nginx/conf
vim nginx.conf

i 进入编辑模式,拉到最下方,开放 443 端口,并填写ssl证书的文件名:

修改结束后,先按 Esc 退出编辑模式,然后输入 :wq 保存并退出。

修改前:

# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }

修改后:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 443 ssl;
server_name www.qianguyihao.com;

ssl_certificate /usr/local/nginx/cert/452xxx_www.qianguyihao.com.pem;
ssl_certificate_key /usr/local/nginx/cert/452_www.qianguyihao.com.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location / {
root /home/www/hexo;
index index.html index.htm;
}
}

(3)修改nginx后,重启nginx:

1
2
3
cd /usr/local/nginx/sbin
ls
./nginx -s reload

http 访问时,自动重定向到 https

继续修改 nginx 文件,修改原有端口 80 的监听,加一行配置:

1
2
3
4
server {
listen 80;
return 301 https://www.qianguyihao.com$request_uri;
}

修改之后,当用户使用 http 协议访问网站时,会自动进行 301 跳转,以 https 协议访问网站。

修改nginx后,重启nginx:

1
2
3
cd /usr/local/nginx/sbin
ls
./nginx -s reload

购买和配置付费证书

免费证书只有一年期限。一年到期后,不能再免费了:

image-20210927165112443

所以,接下来,只能购买和配置付费证书了。

(1)我按照下图的配置,选了一个最便宜的证书:

image-20210927165152188

image-20210927165221923

image-20210927165318768

(2)进入证书管理页,配置证书:

image-20210927170021805

上图中,点击“证书申请”,然后输入域名,然后点击“确定”,会进入下方的页面:

image-20210927170128710

上图中,点击“证书申请”,进入下方的页面:

image-20210927170216847

上图中,点击“下一步”,进入下方页面:

image-20210927170506086

上图中,按照步骤操作。先去域名控制台配置dns,然后回到当前页面点击“验证”,最后点击“提交审核”。

dns解析的配置信息如下:

image-20210927170716824

点击“提交审核”之后,会弹窗:

image-20210927170758859

Hexo 主题自定义

我用的是hexo-theme-melody 主题,官方文档上有详细的配置指南。

遇到的问题

Console expects a writable stream instance

问题描述:执行hexo init时报错Console expects a writable stream instance

解决办法:是Node.js版本的问题,v8.xx的版本太低了,建议升级到V10.x.x以上(我升级到了V12.18.4版本)。

参考链接:hexo与github结合

ssh连接中断的问题

Mac 连接服务器保持ssh会话:https://mp.weixin.qq.com/s/ylMPjyVnmptcEq12Gi-Nzg

想要通过 xxx.com 和 www.xxx.com 都能正常访问,怎么做

问:想要通过 xxx.com 和 www.xxx.com 都能正常访问博客网站,应该怎么做?

解决办法如下:

需要在dns域名解析中,同时添加两条指向公网ip的主机记录:一条@记录,一条www记录。如下:

添加完这两条记录后,通过 xxx.comwww.xxx.com,都可以访问你的服务器。

在支持https的情况下,如果你只添加了www记录,那么,只能通过以下网址访问:

1
2
3
www.qianguyihao.com
https://www.qianguyihao.com
http://www.qianguyihao.com

如果继续添加了@记录,还可以通过一下网址访问:

1
2
3
https://qianguyihao.com
http://qianguyihao.com
qianguyihao.com

补充:为了达到上面这个目标,nginx配置中,server_name只需要设置www.qianguyihao.com即可,不需要设置www.qianguyihao.com qianguyihao.com。不要多此一举。

参考链接:

参考链接

提到了如何将md文件进行管理。

自己动手制作电子书的最佳方式(支持PDF、ePub、mobi等格式)

作者 千古壹号
2020年9月14日 18:00

前言

对于经常阅读的人来说,制作本地电子书,算是刚需了。网上的很多教程都不太好用,所以我特地整理出一个详细的教程。亲测有效,一劳永逸。

当你意外发现某个宝藏公众号时,想要集中阅读上面的每一篇文章,恨不得一口气看完,你会怎么做呢?你可能会把它添加到“微信读书”App 的书架上:

但上面这种曲线救国的方式并非最佳,仍然不尽人意,存在不少问题。

我知道,现在有很多的第三方服务,可以将任意公众号的文章制作成电子书,我试过很多次,但都是付费的。一听说要钱,你又不干了:

再列举一种场景:当你在 GitHub 上发现一个很全面很丰富的项目文档时,仿佛发现了新大陆。可 GitHub 网站的服务器在国外,国内的访问速度实在感人,你想要把它下载到本地查看,会怎么做呢?你估计会选择git clone或者直接选择“Download ZIP”,然后用 Typora 或者 VS Code 软件打开这个项目文档,在本地查看:

总之,你能想到的方式,我都想到了,而且都尝试过。

现在的需求就是,如果你经常阅读网上的资料,肯定会有这样一个需求:怎么把这些几百页、甚至几千页的内容整理成 PDF、ePub、mobi等格式的电子书呢

要么花钱请别人做,要么自己做。

今天这篇文章,就是来告诉你”自己动手制作 PDF、ePub、mobi 等格式电子书“的最佳方式。如果你是码农出身,下面讲的这些步骤,根本难不倒你。如果你不是码农出身,也没关系,只要你有一台电脑,跟着我讲的教程研究下去,肯定能搞定。

问题的关键不在于难不难、会不会,而是在于你是不是爱折腾

制作电子书的具体步骤

整体流程

先说一下整体步骤:

(1)安装 gitbook 工具。

(2)安装 calibre 软件,配置 ebook-convert工具。

(3)将md格式的多个文件素材导出为电子书(支持 PDF、ePub、mobi 等格式)。

(4)高级进阶:配置电子书的目录、封面、页眉页脚等。

整理流程如下:

接下来我们看看详细的完整步骤。

编译环境

node.js和calibre版本:

  • node:v12.18.4
  • calibre:5.11.0

gitbook -V:

  • CLI version: 2.3.2
  • GitBook version: 3.2.3

步骤 1:通过 npm 安装 gitbook-cli

安装命令如下:

1
npm install -g gitbook-cli

安装成功之后,再执行gitbook -V命令确认是否安装成功,此时会自动安装 GitBook:

1
2
3
gitbook -V
CLI version: 2.3.2
GitBook version: 3.2.3

备注:如果你不知道 npm 是什么,可以自行查阅如何安装 Node.js 和 npm 环境

如果你在执行gitbook -V命令的时候提示错误TypeError: cb.apply is not a function,有两个解决办法:

  • 方法1:原因是 Node.js版本不对。Node.js 建议安装 10.X版本(比如 10.21.0 版本)。参考链接:https://www.bilibili.com/read/cv6932054/

  • 方法2:打开文件node_modules/gitbook-cli/node_modules/npm/node_modules/graceful-fs/polyfills.js,将下面这三行代码注释掉:

1
2
3
fs.stat = statFix(fs.stat)
fs.fstat = statFix(fs.fstat)
fs.lstat = statFix(fs.lstat)

参考链接:https://flaviocopes.com/cb-apply-not-a-function/

步骤 2:安装 ebook-convert(针对 Windows 用户)

ebook-convert 是能够自由转化格式的一个命令行工具,已经包含在 calibre 软件里面了。

(1)安装 calibre 软件。calibre 的官网如下:(我们可以去官网下载安装)

https://calibre-ebook.com/

(2)在终端输入ebook-convert --version命令,验证 ebook-convert 是否能正常使用:

1
2
3
ebook-convert --version
ebook-convert.exe (calibre 5.11.0)
Created by: Kovid Goyal <kovid@kovidgoyal.net>

如果输入上面的命令后提示错误,说明你还需要将 calibre 的安装目录添加到系统的环境变量中。

步骤 2:安装 ebook-convert(针对 Mac 用户)

ebook-convert 是能够自由转化格式的一个命令行工具,已经包含在 calibre 软件里面了。

(1)安装 calibre 软件。calibre 的官网如下:(我们可以去官网下载安装)

https://calibre-ebook.com/

(2)配置 ebook-convert。针对 Mac 系统,需要执行如下命令,把 ebook-convert 软链接到 bin 目录:

1
sudo ln -s /Applications/calibre.app/Contents/MacOS/ebook-convert /usr/bin

执行上面的命令后,如果出现Operation not permitted异常,说明系统权限限制,此时需要配置环境变量

(3)环境变量配置:

1
2
3
4
5
vim ~/.bash_profile

# 将下面这两行配置,添加到 .bash_profile 文件中
export EBOOK_PATH=/Applications/calibre.app/Contents/MacOS
export PATH=$PATH:$EBOOK_PATH

备注:可以自行研究下,在命令行环境,如何通过 vim 编辑文件。

然后刷新一下刚刚的配置:

1
source ~/.bash_profile

(4)在终端输入ebook-convert --version命令,验证ebook-convert是否能正常使用:

1
2
3
4
ebook-convert --version
ebook-convert (calibre 5.4.2)
Created by: Kovid Goyal <kovid@kovidgoyal.net>
meiyamin@meiyamins-MacBook-Pro  ~ 

步骤 3:配置电子书的目录

本地新建一个空的文件夹,作为我们的电子书项目。文件夹的名字随便起,但建议用英文命名。

(1)项目初始化。

在当前项目下,执行如下命令,进行初始化:

1
gitbook init

此时,项目下会自动生成如下两个文件:(非常重要,必不可少

  • README.md:书籍的简介放在这个文件里。

  • SUMMARY.md:书籍的目录结构在这里配置。

这两个文件创建后,内容为空白,可使用 Markdown 语言自定义内容。

(2)配置电子书的目录。

我们先把本地的 markdown 文件(也就是我们的电子书素材)放到项目中,然后在SUMMARY.md文件中配置电子书的目录。

比如说, 我的项目中有下面这些文件:

那么,我在SUMMARY.md文件中就要这样配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 目录

* [README](./README.md)
* [00-前端工具](00-前端工具/0-README.md)
* [01-VS Code的使用](00-前端工具/01-VS Code的使用.md)
* [02-Git的使用](00-前端工具/02-Git的使用.md)
* [01-HTML](01-HTML/0-README.md)
* [01-认识Web和Web标准](01-HTML/01-认识Web和Web标准.md)
* [02-浏览器的介绍](01-HTML/02-浏览器的介绍.md)
* [03-初识HTML](01-HTML/03-初识HTML.md)
* [02-CSS基础](02-CSS基础/0-README.md)
* [01-CSS属性:字体属性和文本属性](02-CSS基础/01-CSS属性:字体属性和文本属性.md)
* [02-CSS属性:背景属性](02-CSS基础/02-CSS属性:背景属性.md)
* [03-CSS样式表和选择器](02-CSS基础/03-CSS样式表和选择器.md)
* [03-JavaScript基础](03-JavaScript基础/0-README.md)
* [00-编程语言](03-JavaScript基础/00-编程语言.md)
* [01-JS简介](03-JavaScript基础/01-JS简介.md)
* [02-变量](03-JavaScript基础/02-变量.md)
* [03-变量的数据类型:基本数据类型和引用数据类型](03-JavaScript基础/03-变量的数据类型:基本数据类型和引用数据类型.md)

制作成的目录,将会是下面这种效果:

步骤 4:导出电子书

(1)本地预览电子书:

1
gitbook serve

执行上方命令后,工具会对项目里的 Markdown 格式的文件进行转换,默认转换为 html 格式,最后提示 Serving book on http://localhost:4000

我们打开浏览器输入http://localhost:4000,预览一下电子书的效果:

(2)制作并导出电子书。接下来就是见证奇迹的时刻

生成 PDF 格式的电子书:(PDF 是最常见的文档格式)

1
gitbook pdf ./ ./mybook.pdf

生成 epub 格式的电子书:(epub 是最常见、最通用的电子书格式)

1
gitbook epub ./ ./mybook.epub

生成 mobi 格式的电子书:(mobi 格式可以在 kindle 中打开)

1
gitbook mobi ./ ./mybook.mobi

上面这三种格式的电子书生成之后,项目里会看到这三个新增的文件:

我们把电子书打开,验收一下成果。

打开 pdf 电子书看看效果:

打开 epub 电子书看看效果:

怎么样,自制电子书就这样做好了,是不是很有成就感?

制作电子书的高级配置

电子书做好之后,我猜你肯定想进一步做个性化配置,比如:怎么加封面?怎么修改页眉页脚?还有其他的一些配置。

我们来看看亲手制作的电子书,有哪些常见的高级配置。

制作书籍封面

为了让书籍显示得更加优雅,我们可以指定一个自定义的封面。操作如下:

在项目的根目录下准备好 cover.jpg (大封面)和 cover_small.jpg (小封面)这两种封面图片。注意,图片的文件名和后缀名必须严格按照这句话来。

GitBook 的官方文档建议: cover.jpg (大封面)的尺寸为 1800x2360 像素,cover_small.jpg(小封面)的尺寸为 200x262 像素。图片的制作,建议遵循如下规范:

  • 没有边框
  • 清晰可见的书本标题
  • 任何重要的文字在小封面中应该清晰可见

book.json :电子书的各种配置

我们可以在项目的根目录下新建一个文件book.json(注意,文件名是book,后缀名是json),这个book.json就是电子书的配置文件,可以在里面填一些常见的配置。

关于 book.json 的配置项有很多,我们可以在网上搜索“GitBook book.json”找到。这里大致列举一些。

1、常规配置如下:

配置 book.json 的示例如下:

1
2
3
4
5
6
7
8
{
"title": "前端入门和进阶图文教程",
"description": "前端入门到进阶图文教程,超详细的Web前端学习笔记。从零开始学前端,做一名精致优雅的前端工程师。公众号「千古壹号」作者。",
"author": "千古壹号",
"language": "zh-hans",
"gitbook": "3.2.3",
"root": "."
}

备注:上面的root根目录为当前目录,使用默认的就好,此项可以删掉,这里仅做演示。

2、pdf 的配置如下:(使用 book.json 中的一组选项来定制 PDF 输出)

配置项描述
pdf.pageNumbers将页码添加到每个页面的底部(默认为 true)
pdf.fontSize基本字体大小(默认是 12)
pdf.fontFamily基本字体样式(默认是 Arial)
pdf.paperSize页面尺寸,选项有: a0、a1、 a2、 a3、a4、a5、a6、b0、b1、b2、b3、b4、b5、b6、legal、letter (默认值是 a4)
pdf.margin.top上边距(默认值是 56)
pdf.margin.bottom下边距(默认值是 56)
pdf.margin.left左边距(默认值是 62)
pdf.margin.right右边距(默认值是 62)

定制 PDF 文档输出格式的示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"pdf": {
"pageNumbers": false,
"fontSize": 12,
"paperSize": "a4",
"margin": {
"top": 36,
"bottom": 36,
"left": 62,
"right": 62
}
}
}

备注:如果你不需要对输出的 pdf 做任何特定的配置,则不需要添加上面的内容,让 pdf 的输出格式保持默认就好。

3、plugins 插件:

插件及其配置在 book.json 中指定,让电子书的配置能力更加强大。

通过插件,我们可以做很多事情,比如:修改页眉页脚、自动生成并显示图片的标题等。

另外,针对在线版的GitBook电子书,也有很多插件,这里列举几个:

关于插件的具体配置,感兴趣的同学可以自行研究下。

自动生成目录(重要)

如果你的电子书素材里有很多 markdown 文件,那么,如何将多个 markdown 文件的文件名,在SUMMARY.md里快速生成对应的目录?

难道要一个一个地手动 copy 吗?这不可能。

说白了,这个需求就是:如何自动生成电子书的目录?改变世界的程序员用「脚本」就能搞定,一键执行。

网上有很多好用的脚本,我给你推荐一个亲测好用的脚本:

GitBook 自动生成目录的脚本:https://github.com/fushenghua/gitbook-plugin-summary

操作方法很简单,把上面这个链接中的项目下载下来,进入到这个项目的目录,执行 python gitbook-plugin-summary.py dirPath 即可自动生成电子书的目录,亲测有效。备注:这里的dirPath指的是你的电子书目录的绝对路径。

对了,在执行上面这个脚本之前,记得先安装 Python 环境。

电子书用什么软件打开

用什么软件打开 PDF

Windows 平台:可以用「福昕阅读器」或者「Acrobat Reader DC」。「福昕阅读器」既有 Windows 平台,也有 Mac 平台。

Mac 平台:可以用自带的「预览」打开。

其实,不管你用的是 Windows 电脑还是 Mac 电脑,你都可以用 Chrome 浏览器打开 PDF。

iPhone 或 iPad平台:可以用自带的「iBooks」打开,或者用「WPS Office」打开。也可以用第三方软件「GoodReader」,不过需要 40 人民币。

Android 手机:可以用「WPS Office」等第三方办公软件打开。

用什么软件阅读 ePub 电子书

Windows 平台:可以用「calibre」软件阅读 epub 电子书。

Mac & iPhone & iPad 平台:用自带的「iBooks」阅读即可。iBooks 可以非常方便地对电子书进行标注和搜索,无疑是体验最好的 ePub 电子书阅读软件。

Android 手机:可以用「多看阅读」App 来阅读 epub 格式电子书。

用什么方式阅读 mobi 电子书

kindle 电子书有两种常见的电子书格式:「mobi」格式和「azw3」格式。

  • 针对 mobi 格式的电子书,你既可以通过邮件的形式将其发送到 kindle 阅读器(可以自行网上查一下相关教程),也可以将其拷贝到 kindle 阅读器(是连接 usb 进行拷贝)。

  • 针对 azw3 格式的电子书,就只能通过拷贝的形式(是连接 usb 拷贝)传输到 kindle 阅读器。

小结

我在 2017 年 1 月写过一篇电子书科普的文章,快三年过去了,如今回过头来看,那篇文章一点也不过时,不妨看看:《电子书有哪些常见格式?以及该怎样阅读它

最后一段

如果你一时半会儿找不到可用的素材来制作电子书,可以拿我的项目练练手。项目地址:

https://github.com/qianguyihao/web

我用上面的项目制作成了一个电子书。在“千古壹号”的公众号后台回复“pdf”,给你看看我制作的电子书效果。

不瞒你说,这篇文章,我在一年多以前就写好了初稿并放在了 GitHub 上,当时专门折腾过一次。

最近几天,我突然又有了制作电子书的需求。一年多过去了,我还以为有啥新的方法可以试试,然而我在网上找了一圈,好用的方法还是没变。所以,我今天整理一下发出来,希望让更多人看到。

其他的各种自制电子书的方法我都试过了,都不太好使,唯独 GitBook + calibre 是最佳选择,信我没错!

参考链接

当今世间最强编辑器:第一次使用 VS Code 时你应该知道的一切配置

作者 千古壹号
2020年6月19日 18:00

前言

VS Code 软件实在是太酷、太好用了,越来越多的新生代互联网青年正在使用它。

前端男神尤雨溪大大这样评价 VS Code:

有一点你可能会感到惊讶:VS Code 这款软件本身,是用 JavaScript 语言编写的(具体请自行查阅基于 JS 的客户端开发框架 Electron)。Jeff Atwood 在 2007 年提出了著名的 Atwood 定律:

任何能够用 JavaScript 实现的应用系统,最终都必将用 JavaScript 实现

Jeff Atwood 这个人是谁不重要(他是 Stack Overflow 网站的联合创始人),重要的是这条定律。

前端目前是处在春秋战国时代,各路英雄豪杰成为后浪,各种框架工具层出不穷,VS Code 软件无疑是大前端时代最骄傲的工具。

如果你是做前端开发(JavaScript 编程语言为主),则完全可以将 VS Code 作为「主力开发工具」。这款软件是为前端同学量身定制的。

如果你是做其他语言方向的开发,并且不需要太复杂的集成开发环境,那么,你可以把 VS Code 作为「代码编辑器」来使用,纵享丝滑。

甚至是一些写文档、写作的同学,也经常把 VS Code 作为 markdown 写作工具,毫无违和感。

退而求其次,即便你不属于以上任何范畴,你还可以把 VS Code 当作最简单的文本编辑器来使用,完胜 Windows 系统自带的记事本。

写下这篇文章,是顺势而为。

一、VS Code 的介绍

VS Code 的全称是 Visual Studio Code,是一款开源的、免费的、跨平台的、高性能的、轻量级的代码编辑器。它在性能、语言支持、开源社区方面,都做得很不错。

IDE 与 编辑器的对比

IDE 和编辑器是有区别的:

  • IDE(Integrated Development Environment,集成开发环境):对代码有较好的智能提示和相互跳转,同时侧重于工程项目,对项目的开发、调试工作有较好的图像化界面的支持,因此比较笨重。比如 Eclipse 的定位就是 IDE。

  • 编辑器:要相对轻量许多,侧重于文本的编辑。比如 Sublime Text 的定位就是编辑器。再比如 Windows 系统自带的「记事本」就是最简单的编辑器。

需要注意的是,VS Code 的定位是编辑器,而非 IDE ,但 VS Code 又比一般的编辑器的功能要丰富许多。可以这样理解:VS Code 的体量是介于编辑器和 IDE 之间。

VS Code 的特点

  • VS Code 的使命,是让开发者在编辑器里拥有 IDE 那样的开发体验,比如代码的智能提示、语法检查、图形化的调试工具、插件扩展、版本管理等。

  • 跨平台支持 MacOS、Windows 和 Linux 等多个平台。

  • VS Code 的源代码以 MIT 协议开源。

  • 支持第三方插件,功能强大,生态系统完善。

  • VS Code 自带了 TypeScript 和 Node.js 的支持。也就是说,你在书写 JS 和 TS 时,是自带智能提示的。当然,其他的语言,你可以安装相应的扩展包插件,也会有智能提示。

前端利器之争: VS Code 与 WebStorm

前端小白最喜欢问的一个问题是:哪个编辑器/IDE 好用?是 VS Code 还是 WebStorm (WebStorm 其实是 IntelliJ IDEA 的定制版)?我来做个对比:

  • 哪个更酷:显然 VS Code 更酷。

  • 内存占用情况:根据我的观察,VS Code 是很占内存的(尤其是当你打开多个窗口的时候),但如果你的内存条够用,使用起来是不会有任何卡顿的感觉的。相比之下,IntelliJ IDEA 不仅非常占内存,而且还非常卡顿。如果你想换个既轻量级、又不占内存的编辑器,最好还是使用「Sublime Text」编辑器。

  • 使用比例:当然是 VS Code 更胜一筹。先不说别的,我就拿数据说话,我目前所在的前端团队有 100 人左右,绝大部分前端同学都在用 VS Code,妥妥的。

所以,如果你以后还问这个问题,那就真有些掉底了。

VS Code 的安装

VS Code 的安装很简单,直接去官网下载安装包,然后双击安装即可。

上图中,直接点击 download,一键下载安装即可。

二、崭露锋芒:VS Code 快捷键

VS Code 用得熟不熟,首先就看你是否会用快捷键。以下列出的内容,都是常用快捷键,而加粗部分的快捷键,使用频率则非常高。

任何工具,掌握 20%的技能,足矣应对 80% 的工作。既然如此,你可能会问:那就只保留 20% 的特性,不久可以满足 80%的用户了吗?

但我想说的是:**那从来都不是同样的 20%**,每个人都会用到不同的功能。

掌握下面这些高频核心快捷键,你和你的工具,足矣露出锋芒。

1、工作区快捷键

Mac 快捷键Win 快捷键作用备注
Cmd + Shift + PCtrl + Shift + P,F1显示命令面板
Cmd + BCtrl + B显示/隐藏侧边栏很实用
Cmd + \Ctrl + \创建多个编辑器窗口【重要】抄代码利器
Cmd + 1、2Ctrl + 1、2聚焦到第 1、第 2 个编辑器同上重要
cmd +/-ctrl +/-将工作区放大/缩小(包括代码字体、左侧导航栏)在投影仪场景经常用到
Cmd + JCtrl + J显示/隐藏控制台
Cmd + Shift + NCtrl + Shift + N重新开一个软件的窗口很常用
Cmd + Shift + WCtrl + Shift + W关闭软件的当前窗口
Cmd + NCtrl + N新建文件
Cmd + WCtrl + W关闭当前文件

2、跳转操作

Mac 快捷键Win 快捷键作用备注
Cmd + `没有在同一个软件的多个工作区之间切换使用很频繁
Cmd + Option + 左右方向键Ctrl + Pagedown/Pageup在已经打开的多个文件之间进行切换非常实用
Ctrl + TabCtrl + Tab在已经打开的多个文件之间进行跳转不如上面的快捷键快
Cmd + Shift + OCtrl + shift + O在当前文件的各种方法之间进行跳转
Ctrl + GCtrl + G跳转到指定行
Cmd+Shift+\Ctrl+Shift+\跳转到匹配的括号

3、移动光标

Mac 快捷键Win 快捷键作用备注
方向键方向键单个字符之间移动光标大家都知道
option + 左右方向键Ctrl + 左右方向键单词之间移动光标很常用
Cmd + 左右方向键Fn + 左右方向键整行之间移动光标很常用
Cmd + ←Fn + ←(或 Win + ←)将光标定位到当前行的最左侧很常用
Cmd + →Fn + →(或 Win + →)将光标定位到当前行的最右侧很常用
Cmd + ↑Ctrl + Home将光标定位到文章的第一行
Cmd + ↓Ctrl + End将光标定位到文章的最后一行
Cmd + Shift + \代码块之间移动光标

4、编辑操作

Mac 快捷键Win 快捷键作用备注
Cmd + EnterCtrl + Enter在当前行的下方新增一行,然后跳至该行即使光标不在行尾,也能快速向下插入一行
Cmd+Shift+EnterCtrl+Shift+Enter在当前行的上方新增一行,然后跳至该行即使光标不在行尾,也能快速向上插入一行
Option + ↑Alt + ↑将代码向上移动很常用
Option + ↓Alt + ↓将代码向下移动很常用
Option + Shift + ↑Alt + Shift + ↑将代码向上复制
Option + Shift + ↓Alt + Shift + ↓将代码向下复制写重复代码的利器

5、多光标编辑

Mac 快捷键Win 快捷键作用备注
Cmd + Option + 上下键Ctrl + Alt + 上下键在连续的多列上,同时出现光标
Option + 鼠标点击任意位置Alt + 鼠标点击任意位置在任意位置,同时出现光标
Option + Shift + 鼠标拖动Alt + Shift + 鼠标拖动在选中区域的每一行末尾,出现光标
Cmd + Shift + LCtrl + Shift + L在选中文本的所有相同内容处,出现光标

其他的多光标编辑操作:(很重要)

  • 选中某个文本,然后反复按住快捷键「 Cmd + D 」键(windows 用户是按住「Ctrl + D」键), 即可将全文中相同的词逐一加入选择。

  • 选中一堆文本后,按住「Option + Shift + i」键(windows 用户是按住「Alt + Shift + I」键),既可在每一行的末尾都创建一个光标。

6、删除操作

Mac 快捷键Win 快捷键作用备注
Cmd + shift + KCtrl + Shift + K删除整行「Cmd + X」的作用是剪切,但也可以删除整行
option + BackspaceCtrl + Backspace删除光标之前的一个单词英文有效,很常用
option + deleteCtrl + delete删除光标之后的一个单词
Cmd + Backspace删除光标之前的整行内容很常用
Cmd + delete删除光标之后的整行内容

备注:上面所讲到的移动光标、编辑操作、删除操作的快捷键,在其他编辑器里,大部分都适用。

7、编程语言相关

Mac 快捷键Win 快捷键作用备注
Cmd + /Ctrl + /添加单行注释很常用
Option + Shift + FAlt + shift + F代码格式化很常用
F2F2以重构的方式进行重命名改代码备
Ctrl + J将多行代码合并为一行Win 用户可在命令面板搜索”合并行“
Cmd +
Cmd + UCtrl + U将光标的移动回退到上一个位置撤销光标的移动和选择

8、搜索相关

Mac 快捷键Win 快捷键作用备注
Cmd + Shift + FCtrl + Shift +F全局搜索代码很常用
Cmd + PCtrl + P在当前的项目工程里,全局搜索文件名
Cmd + FCtrl + F在当前文件中搜索代码,光标在搜索框里
Cmd + GF3在当前文件中搜索代码,光标仍停留在编辑器里很巧妙

9、自定义快捷键

按住快捷键「Cmd + Shift + P」,弹出命令面板,在命令面板中输入“快捷键”,可以进入快捷键的设置。

当然,你也可以选择菜单栏「偏好设置 –> 键盘快捷方式」,进入快捷键的设置:

10、快捷键列表

你可以点击 VS Code 左下角的齿轮按钮,效果如下:

上图中,在展开的菜单中选择「键盘快捷方式」,就可以查看和修改所有的快捷键列表了:

快捷键参考链接

三、命令面板的使用

Mac 用户按住快捷键 Cmd+Shift+P (Windows 用户按住快捷键Ctrl+Shift+P),可以打开命令面板。效果如下:

如果们需要修改一些设置项,可以通过「命令面板」来操作,效率会更高。这里列举一些。

1、设置字体大小

在命令面板输入“字体”,可以进行字体的设置,效果如下:

当然,你也可以在菜单栏,选择「首选项-设置-常用设置」,在这个设置项里修改字体大小。

2、快捷键设置

在命令面板输入“快捷键”,就可以进入快捷键的设置。

3、大小写转换

选中文本后,在命令面板中输入transfrom,就可以修改文本的大小写了。

4、使用命令行启动 VS Code

(1)输入快捷键「Cmd + Shift + P 」,选择install code command

(2)使用命令行:

  • code命令:启动 VS Code 软件

  • code pathName/fileName命令:通过 VS Code 软件打开指定目录/指定文件。

四、私人订制:VS Code 的常见配置

1、VS Code 设置为中文语言

Mac 用户按住快捷键 Cmd+Shift+P (Windows 用户按住快捷键Ctrl+Shift+P),打开命令面板。

在命令面板中,输入Configure Display Language,选择Install additional languages,然后安装插件Chinese (Simplified) Language Pack for Visual Studio Code即可。

或者,我们可以直接安装插件Chinese (Simplified) Language Pack for Visual Studio Code,是一样的。

安装完成后,重启 VS Code。

2、面包屑(Breadcrumb)

打开 VS Code 的设置项,选择「用户设置 -> 工作台 -> 导航路径」,如下图所示:

上图中,将红框部分打钩即可。

设置成功后,我们就可以查看到当前文件的「层级结构」,非常方便。如下图所示:

有了这个面包屑导航,我们可以在任意目录、任意文件之间随意跳转。

3、左右显示多个编辑器窗口(抄代码利器)

Mac 用户按住快捷键 Cmd + \, Windows 用户按住快捷键Ctrl + \,即可同时打开多个编辑器窗口,效果如下:

按快捷键「Cmd + 1 」切换到左边的窗口,按快捷键「Cmd + 2 」切换到右边的窗口。随时随地,想切就切。

学会了这一招,以后抄代码的时候,leader 再也不用担心我抄得慢了,一天工资到手。

4、是否显示代码的行号

VS Code 默认显示代码的行号。你可以在设置项里搜索 editor.lineNumbers修改设置,配置项如下:

我建议保留这个设置项,无需修改。

5、右侧是否显示代码的缩略图

VS Code 会在代码的右侧,默认显示缩略图。你可以在设置项里搜索 editor.minimap进行设置,配置项如下:

6、将当前行代码高亮显示(更改光标所在行的背景色)

当我们把光标放在某一行时,这一行的背景色并没有发生变化。如果想高亮显示当前行的代码,需要设置两步:

(1)在设置项里搜索editor.renderLineHighlight,将选项值设置为all或者line

(2)在设置项里增加如下内容:

1
2
3
4
"workbench.colorCustomizations": {
"editor.lineHighlightBackground": "#00000090",
"editor.lineHighlightBorder": "#ffffff30"
}

上方代码,第一行代码的意思是:修改光标所在行的背景色(背景色设置为全黑,不透明度 90%);第二行代码的意思是:修改光标所在行的边框色。

7、改完代码后立即自动保存

方式一

改完代码后,默认不会自动保存。你可以在设置项里搜索files.autoSave,修改配置项如下:

上图中,我们将配置项修改为onFocusChange之后,那么,当光标离开该文件后,这个文件就会自动保存了。非常方便

方式二

当然,你也可以直接在菜单栏选择「文件-自动保存」。勾选后,当你写完代码后,文件会立即实时保存。

8、保存代码后,是否立即格式化

保存代码后,默认不会立即进行代码的格式化。你可以在设置项里搜索editor.formatOnSave查看该配置项:

我觉得这个配置项保持默认就好,不用打钩。

9、空格 or 制表符

VS Code 会根据你所打开的文件来决定该使用空格还是制表。也就是说,如果你的项目中使用的都是制表符,那么,当你在写新的代码时,按下 tab 键后,编辑器就会识别成制表符。

常见的设置项如下:

  • editor.detectIndentation:自动检测(默认开启)。截图如下:

  • editor.insertSpaces:按 Tab 键时插入空格(默认)。截图如下:

  • editor.tabSize:一个制表符默认等于四个空格。截图如下:

10、新建文件后的默认文件类型

当我们按下快捷键「Cmd + N」新建文件时,VS Code 默认无法识别这个文件到底是什么类型的,因此也就无法识别相应的语法高亮。

如果你想修改默认的文件类型,可以在设置项里搜索files.defaultLanguage,设置项如下:

上图中的红框部分,填入你期望的默认文件类型。我填的是html类型,你也可以填写成 javascript 或者 markdown,或者其他的语言类型。

11、删除文件时,是否弹出确认框

当我们在 VS Code 中删除文件时,默认会弹出确认框。如果你想修改设置,可以在设置项里搜索xplorer.confirmDelete。截图如下:

我建议这个设置项保持默认的打钩就好,不用修改。删除文件前的弹窗提示,也是为了安全考虑,万一手贱不小心删了呢?

接下来,我们来讲一些更高级的配置。

12、文件对比

VS Code 默认支持对比两个文件的内容。选中两个文件,然后右键选择「将已选项进行比较」即可,效果如下:

VS Code 自带的对比功能并不够强大,我们可以安装插件compareit,进行更丰富的对比。比如说,安装完插件compareit之后,我们可以将「当前文件」与「剪切板」里的内容进行对比:

13、查找某个函数在哪些地方被调用了

比如我已经在a.js文件里调用了 foo()函数。那么,如果我想知道foo()函数在其他文件中是否也被调用了,该怎么做呢?

做法如下:在 a.js 文件里,选中foo()函数(或者将光标放置在foo()函数上),然后按住快捷键「Shift + F12」,就能看到 foo()函数在哪些地方被调用了,比较实用。

14、鼠标操作

  • 在当前行的位置,鼠标三击,可以选中当前行。

  • 用鼠标单击文件的行号,可以选中当前行。

  • 在某个行号的位置,上下移动鼠标,可以选中多行

15、重构

重构分很多种,我们来举几个例子。

命名重构

当我们尝试去修改某个函数(或者变量名)时,我们可以把光标放在上面,然后按下「F2」键,那么,这个函数(或者变量名)出现的地方都会被修改。

方法重构

选中某一段代码,这个时候,代码的左侧会出现一个「灯泡图标」,点击这个图标,就可以把这段代码提取为一个单独的函数。

16、在当前文件中搜索

在上面的快捷键列表中,我们已经知道如下快捷键:

  • Cmd + F(Win 用户是 Ctrl + F):在当前文件中搜索,光标在搜索框里

  • Cmd + G(Win 用户是 F3):在当前文件中搜索,光标仍停留在编辑器里

另外,你可能会注意到,搜索框里有很多按钮,每个按钮都对应着不同的功能,如下图所示:

上图中,你可以通过「Tab」键和「Shift + Tab」键在输入框和替换框之间进行切换。

「在选定内容中查找」这个功能还是比较实用的。你也可以在设置项里搜索 editor.find.autoFindInSelection,勾选该设置项后,那么,当你选中指定内容后,然后按住「Cmd + F」,就可以自动只在这些内容里进行查找。该设置项如下图所示:

17、全局搜索

在上面的快捷键列表中,我们已经知道如下快捷键:

  • Cmd + Shift + F(Win 用户是 Ctrl + Shift +F):在全局的文件夹中进行搜索。效果如下:

上图中,你可以点击红框部分,展开更多的配置项。

18、Git 版本管理

VS Code 自带了 Git 版本管理,如下图所示:

上图中,我们可以在这里进行常见的 git 命令操作。如果你还不熟悉 Git 版本管理,先去补补课吧。

与此同时,我建议安装插件GitLens,它是 VS Code 中我最推荐的一个插件,简直是 Git 神器,码农必备。

19、将工作区放大/缩小

我们在上面的设置项里修改字体大小后,仅仅只是修改了代码的字体大小。

如果你想要缩放整个工作区(包括代码的字体、左侧导航栏的字体等),可以按下快捷键「**cmd +/-**」。windows 用户是按下「ctrl +/-」

当我们在投影仪上给别人演示代码的时候,这一招十分管用

如果你想恢复默认的工作区大小,可以在命令面板输入重置缩放(英文是reset zoom

20、创建多层子文件夹

我们可以在新建文件夹的时候,如果直接输入aa/bb/cc,比如:

那么,就可以创建多层子文件夹,效果如下:

21、.vscode 文件夹的作用

为了统一团队的 vscode 配置,我们可以在项目的根目录下建立.vscode目录,在里面放置一些配置内容,比如:

  • settings.json:工作空间设置、代码格式化配置、插件配置。

  • sftp.json:ftp 文件传输的配置。

.vscode目录里的配置只针对当前项目范围内生效。将.vscode提交到代码仓库,大家统一配置时,会非常方便。

22、自带终端

我们可以按下「Ctrl + `」打开 VS Code 自带的终端。我认为内置终端并没有那么好用,我更建议你使用第三方的终端 item2

23、markdown 语法支持

VS Code 自带 markdown 语法高亮。也就是说,如果你是用 markdown 格式写文章,则完全可以用 VS Code 进行写作。

写完 md 文件之后,你可以点击右上角的按钮进行预览,如下图所示:

我一般是安装「Markdown Preview Github Styling」插件,以 GitHub 风格预览 Markdown 样式。样式十分简洁美观。

你也可以在控制面板输入Markdown: 打开预览,直接全屏预览 markdown 文件。

24、Emmet in VS Code

Emmet可以极大的提高 html 和 css 的编写效率,它提供了一种非常简练的语法规则。

举个例子,我们在编辑器中输入缩写代码:ul>li*6 ,然后按下 Tab 键,即可得到如下代码片段:

1
2
3
4
5
6
7
8
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>

VS Code 默认支持 Emmet。更多 Emmet 语法规则,请自行查阅。

25、修改字体,使用「Fira Code」字体

这款字体很漂亮,很适合用来写代码:

安装步骤如下:

(1)进入 https://github.com/tonsky/FiraCode 网站,下载并安装「Fira Code」字体。

(2)打开 VS Code 的「设置」,搜索font,修改相关配置为如下内容:

1
2
"editor.fontFamily": "'Fira Code',Menlo, Monaco, 'Courier New', monospace", // 设置字体显示
"editor.fontLigatures": false,//控制是否启用字体连字,true启用,false不启用

上方的第二行配置,取决于个人习惯,我是直接设置为"editor.fontLigatures": null,因为我不太习惯连字。

26、代码格式化:Prettier

我们可以使用 Prettier进行代码格式化,会让代码的展示更加美观。步骤如下:

(1)安装插件 Prettier

(2)在项目的根路径下,新建文件.prettierrc,并在文件中添加如下内容:

1
2
3
4
5
6
7
8
9
{
"printWidth": 150,
"tabWidth": 4,
"semi": true,
"singleQuote": true,
"trailingComma": "es5",
"tslintIntegration": true,
"insertSpaceBeforeFunctionParenthesis": false
}

上面的内容,是我自己的配置,你可以参考。

更多配置,可以参考官方文档:https://prettier.io/docs/en/options.html

27、文件传输:sftp

如果你需要将本地文件通过 ftp 的形式上传到局域网的服务器,可以安装sftp这个插件,很好用。在公司会经常用到。

步骤如下:

(1)安装插件sftp

(2)配置 sftp.json文件。 插件安装完成后,输入快捷键「cmd+shift+P」弹出命令面板,然后输入sftp:config,回车,当前工程的.vscode文件夹下就会自动生成一个sftp.json文件,我们需要在这个文件里配置的内容可以是:

  • host:服务器的 IP 地址

  • username:用户名

  • privateKeyPath:存放在本地的已配置好的用于登录工作站的密钥文件(也可以是 ppk 文件)

  • remotePath:工作站上与本地工程同步的文件夹路径,需要和本地工程文件根目录同名,且在使用 sftp 上传文件之前,要手动在工作站上 mkdir 生成这个根目录

  • ignore:指定在使用 sftp: sync to remote 的时候忽略的文件及文件夹,注意每一行后面有逗号,最后一行没有逗号

举例如下:(注意,其中的注释需要去掉)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"host": "192.168.xxx.xxx", //服务器ip
"port": 22, //端口,sftp模式是22
"username": "", //用户名
"password": "", //密码
"protocol": "sftp", //模式
"agent": null,
"privateKeyPath": null,
"passphrase": null,
"passive": false,
"interactiveAuth": false,
"remotePath": "/root/node/build/", //服务器上的文件地址
"context": "./server/build", //本地的文件地址

"uploadOnSave": true, //监听保存并上传
"syncMode": "update",
"watcher": {
//监听外部文件
"files": false, //外部文件的绝对路径
"autoUpload": false,
"autoDelete": false
},
"ignore": [
//忽略项
"**/.vscode/**",
"**/.git/**",
"**/.DS_Store"
]
}

(3)在 VS Code 的当前文件里,选择「右键 -> upload」,就可以将本地的代码上传到 指定的 ftp 服务器上(也就是在上方 host 中配置的服务器 ip)。

我们还可以选择「右键 -> Diff with Remote」,就可以将本地的代码和 ftp 服务器上的代码做对比。

七、VS Code 配置云同步

我们可以将配置云同步,这样的话,当我们换个电脑时,即可将配置一键同步到本地,就不需要重新安装插件了,也不需要重新配置软件。

我们还可以把配置分享其他用户,也可以把其他用户的配置给自己用。

将自己本地的配置云同步到 GitHub

(1)安装插件 settings-sync

(2)安装完插件后,在插件里使用 GitHub 账号登录。

(3)登录后在 vscode 的界面中,可以选择一个别人的 gist;也可以忽略掉,然后创建一个属于自己的 gist。

(4)使用快捷键 「Command + Shift + P」,在弹出的命令框中输入 sync,并选择「更新/上传配置」,这样就可以把最新的配置上传到 GitHub。

换另外一个电脑时,从云端同步配置到本地

(1)当我们换另外一台电脑时,可以先在 VS Code 中安装 settings-sync 插件。

(2)安装完插件后,在插件里使用 GitHub 账号登录。

(3)登录之后,插件的界面上,会自动出现之前的同步记录:

上图中,我们点击最新的那条记录,就可将云端的最新配置同步到本地:

如果你远程的配置没有成功同步到本地,那可能是网络的问题,此时,可以使用快捷键 「Command + Shift + P」,在弹出的命令框中输入 sync,并选择「下载配置」,多试几次。

使用其他人的配置

如果我们想使用别人的配置,首先需要对方提供给你 gist。具体步骤如下:

(1)安装插件 settings-sync

(2)使用快捷键 「Command + Shift + P」,在弹出的命令框中输入 sync,并选择「下载配置」

(3)在弹出的界面中,选择「Download Public Gist」,然后输入别人分享给你的 gist。注意,这一步不需要登录 GitHub 账号。

八、三头六臂:VS Code 插件推荐

VS Code 有一个很强大的功能就是支持插件扩展,让你的编辑器仿佛拥有了三头六臂。

上图中,点击红框部分,即可在输入框里,查找你想要的插件名,然后进行安装。

我来列举几个常见的插件,这些插件都很实用。注意:顺序越靠前,越实用

1、GitLens 【荐】

我强烈建议你安装插件GitLens,它是 VS Code 中我最推荐的一个插件,简直是 Git 神器,码农必备。如果你不知道,那真是 out 了。

GitLens 在 Git 管理上有很多强大的功能,比如:

  • 将光标放置在代码的当前行,可以看到这样代码的提交者是谁,以及提交时间。这一点,是 GitLens 最便捷的功能。

  • 查看某个 commit 的代码改动记录

  • 查看不同的分支

  • 可以将两个 commit 进行代码对比

  • 甚至可以将两个 branch 分支进行整体的代码对比。这一点,简直是 GitLens 最强大的功能。当我们在不同分支 review 代码的时候,就可以用到这一招。

2、Git History

有些同学习惯使用编辑器中的 Git 管理工具,而不太喜欢要打开另外一个 Git UI 工具的同学,这一款插件满足你查询所有 Git 记录的需求。

3、Live Server 【荐】

在本地启动一个服务器,代码写完后可以实现「热更新」,实时地在网页中看到运行效果。就不需要每次都得手动刷新页面了。

使用方式:安装插件后,开始写代码;代码写完后,右键选择「Open with Live Server」。

4、Chinese (Simplified) Language Pack for Visual Studio Code

让软件显示为简体中文语言。

5、Bracket Pair Colorizer 2:突出显示成对的括号【荐】

Bracket Pair Colorizer 2插件:以不同颜色显示成对的括号,并用连线标注括号范围。简称彩虹括号

另外,还有个Rainbow Brackets插件,也可以突出显示成对的括号。

6、sftp:文件传输 【荐】

如果你需要将本地文件通过 ftp 的形式上传到局域网的服务器,可以安装sftp这个插件,很好用。在公司会经常用到。

详细配置已经在上面讲过。

7、open in browser

安装open in browser插件后,在 HTML 文件中「右键选择 –> Open in Default Browser」,即可在浏览器中预览网页。

8、highlight-icemode:选中相同的代码时,让高亮显示更加明显【荐】

VSCode 自带的高亮显示,实在是不够显眼。用插件支持一下吧。

所用了这个插件之后,VS Code 自带的高亮就可以关掉了:

在用户设置里添加"editor.selectionHighlight": false即可。

参考链接:vscode 选中后相同内容高亮插件推荐

9、vscode-icons

vscode-icons 会根据文件的后缀名来显示不同的图标,让你更直观地知道每种文件是什么类型的。

10、Project Manager

工作中,我们经常会来回切换多个项目,每次都要找到对应项目的目录再打开,比较麻烦。Project Manager 插件可以解决这样的烦恼,它提供了专门的视图来展示你的项目,我们可以把常用的项目保存在这里,需要时一键切换,十分方便。

11、TODO Highlight

写代码过程中,突然发现一个 Bug,但是又不想停下来手中的活,以免打断思路,怎么办?按照代码规范,我们一般是在代码中加个 TODO 注释。比如:(注意,一定要写成大写TODO,而不是小写的todo

1
//TODO:这里有个bug,我一会儿再收拾你

或者:

1
//FIXME:我也不知道为啥, but it works only that way.

安装了插件 TODO Highlight之后,按住「Cmd + Shift + P」打开命令面板,输入「Todohighlist」,选择相关的命令,我们就可以看到一个 todoList 的清单。

12、WakaTime 【荐】

统计在 VS Code 里写代码的时间。统计效果如下:

13、Code Time

Code Time插件:记录编程时间,统计代码行数。

安装该插件后,VS Code 底部的状态栏右下角可以看到时间统计。点击那个位置之后,选择「Code Time Dashboard」,即可查看统计结果。

备注:团长试了一下这个 code time 插件,发现统计结果不是很准。

14、Markdown Preview Github Styling 【荐】

以 GitHub 风格预览 Markdown 样式,十分简洁优雅。就像下面这样,左侧书写 Markdown 文本,右侧预览 Markdown 的渲染效果:

15、Markdown Preview Enhanced

预览 Markdown 样式。

16、Settings Sync【荐】

同步的详细操作已在上面讲过。

17、vscode-syncing

18、Vetur

Vue 多功能集成插件,包括:语法高亮,智能提示,emmet,错误提示,格式化,自动补全,debugger。VS Code 官方钦定 Vue 插件,Vue 开发者必备。

19、ES7 React/Redux/GraphQL/React-Native snippets

React/Redux/react-router 的语法智能提示。

20、minapp:小程序支持

小程序开发必备插件。

21、Prettier:代码格式化

Prettier 是一个代码格式化工具,只关注格式化,但不具备校验功能。在一个多人协同开发的团队中,统一的代码编写规范非常重要。一套规范可以让我们编写的代码达到一致的风格,提高代码的可读性和统一性。自然维护性也会有所提高。

22、ESLint:代码格式校验

日常开发中,建议用可以用 Prettier 做代码格式化,然后用 eslint 做校验。

23、Beautify

代码格式化工具。

24、JavaScript(ES6) code snippets

ES6 语法智能提示,支持快速输入。

25、Search node_modules 【荐】

node_modules模块里面的文件夹和模块实在是太多了,根本不好找。好在安装 Search node_modules 这个插件后,输入快捷键「Cmd + Shift + P」,然后输入 node_modules,在弹出的选项中选择 Search node_modules,即可搜索 node_modules 里的模块。

26、indent-rainbow:突出显示代码缩进

indent-rainbow插件:突出显示代码缩进。

安装完成后,效果如下图所示:

27、javascript console utils:快速打印 log 日志【荐】

安装这个插件后,当我们按住快捷键「Cmd + Shift + L」后,即可自动出现日志 console.log()。简直是日志党福音。

当我们选中某个变量 name,然后按住快捷键「Cmd + Shift + L」,即可自动出现这个变量的日志 console.log(name)

其他的同类插件还有:Turbo Console Log。

不过,生产环境的代码,还是尽量少打日志比较好,避免出现一些异常。

编程有三等境界:

  • 第三等境界是打日志,这是最简单、便捷的方式,略显低级,一般新手或资深程序员偷懒时会用。

  • 第二等境界是断点调试,在前端、Java、PHP、iOS 开发时非常常用,通过断点调试可以很直观地跟踪代码执行逻辑、调用栈、变量等,是非常实用的技巧。

  • 第一等境界是测试驱动开发,在写代码之前先写测试。与第二等的断点调试刚好相反,大部分人不是很习惯这种方式,但在国外开发者或者敏捷爱好者看来,这是最高效的开发方式,在保证代码质量、重构等方面非常有帮助,是现代编程开发必不可少的一部分。

28、Code Spell Checker:单词拼写错误检查

这个拼写检查程序的目标是帮助捕获常见的单词拼写错误,可以检测驼峰命名。从此告别 Chinglish.

29、Local History 【荐】

维护文件的本地历史记录,强烈建议安装。代码意外丢失时,有时可以救命。

30、Polacode-2020 【荐】

可以把代码保存成美观的图片,主题不同,代码配色方案也不同,也可以自己设置边框颜色、大小、阴影。

有人可能会说:直接用 QQ 截图不行吗?可以是可以,但不够美观、不够干净。

31、Image Preview 【荐】

图片预览。鼠标移动到图片 url 上的时候,会自动显示图片的预览和图片尺寸。

32、Auto Close Tag、Auto Rename Tag

自动闭合标签、自动对标签重命名。

33、Better Comments

为注释添加更醒目、带分类的色彩。

34、CSS Peek

增强 HTML 和 CSS 之间的关联,快速查看该元素上的 CSS 样式。

35、Vue CSS Peek

CSS Peek 对 Vue 没有支持,该插件提供了对 Vue 文件的支持。

36、Color Info

这个便捷的插件,将为你提供你在 CSS 中使用颜色的相关信息。你只需在颜色上悬停光标,就可以预览色块中色彩模型的(HEX、 RGB、HSL 和 CMYK)相关信息了。

37、RemoteHub

不要惊讶,RemoteHub 和 GitLens 是同一个作者开发出来的。

RemoteHub插件的作用是:可以在本地查看 GitHub 网站上的代码,而不需要将代码下载到本地。

这个插件目前使用的人还不多,赶紧安装起来尝尝鲜吧。

38、Live Share:实时编码分享

Live Share这个神奇的插件是由微软官方出品,它的作用是:实时编码分享。也就是说,它可以实现你和你的同伴一起写代码。这绝对就是结对编程的神器啊。

安装方式:

打开插件管理,搜索“live share”,安装。安装后重启 VS Code,在左侧会多出一个按钮:

上图中,点击红框部分,登录后就可以分享你的工作空间了。

39、Import Cost

在项目开发过程中,我们会引入很多 npm 包,有时候可能只用到了某个包里的一个方法,却引入了整个包,导致代码体积增大很多。Import Cost插件可以在代码中友好的提示我们,当前引入的包会增加多少体积,这很有助于帮我们优化代码的体积。

八、主题插件

给你的 VS Code 换个皮肤吧,免费的那种。

  • Dracula Theme

  • Material Theme

  • Nebula Theme

  • One Dark Pro

  • One Monokai Theme

  • Monokai Pro

  • Ayu

  • GitHub Plus Theme:白色主题

  • Horizon Theme:红色主题

最后一段

如果你有什么推荐的 VS Code 插件,欢迎留言。

大家完全不用担心这篇文章会过时,随着 VS Code 的版本更新和插件更新,本文也会随之更新。关于 VS Code 内容的后续更新,你可以关注我在 GitHub 上的前端入门项目,项目地址是 https://github.com/qianguyihao/Web ,超级详细和真诚。

❌
❌