近期打算写一些游记,一看手机拍的照片大小都在 5Mb 以上,所以想着研究一下图片优化方法。主要了解了Imgbot 和 Webp 两种方法,最后选择通过腾讯云来优化图片。
近期打算写一些游记,一看手机拍的照片大小都在 5Mb 以上,所以想着研究一下图片优化方法。主要了解了Imgbot 和 Webp 两种方法,最后选择通过腾讯云来优化图片。
李如一在 写作风格手册 中提到写作风格的作用是 「保持机构和组织内部的文体统一,提高沟通效率。」
本清单会持续更新,如果有相关的建议,可以在留言中告诉我。
算法花园定位为个人博客,也是我和这个世界沟通的窗口。为提高读者阅读体验,参考相关文章后,推出该清单统一网站文章的基础风格。
-
来连接。为保证搜索引擎效果,尽量不要修改文档名称。<!--more-->
。20191103: 第一版
博客折腾记:hexo-leancloud-counter-security 与标题中的引号冲突
昨天按照 hexo-theme-next/LEANCLOUD-COUNTER-SECURITY.md at master · theme-next/hexo-theme-next 这个文档配置博客阅读次数时,遇到 hexo-leancloud-counter-security
插件的一个冲突。
完成配置使用 hexo -d
时,终端中出现下面的错误提示:
1 | ATAL Something's wrong. Maybe you can find the solution here: http://hexo.io/docs/troubleshooting.html |
看提示貌似是利用 Json 解析字符串的时候出现问题。打开 node_modules/hexo-leancloud-counter-security/index.js:92
,对应出现一个解析 JSON的:
1 | y = JSON.parse(memoData[memoIdx].substring(0, memoData[memoIdx].length - 1)); |
js 没有怎么接触过,不知道能不能单步调试之类的,只好祭出输出调试大法,加上两个输出:
1 | console.log(memoIdx) |
然后再执行 hexo -d
命令,命令行输出为:
1 | 28 |
JSON 在解析字符串{"title":"System.out.println("hello world!");","url":"/post/hello-world.html"}
时出现错误。对应的正是之前写的一篇名为 System.out.println("hello world!");
的文章,由于 JSON 格式中字符串是需要用""
修饰,导致JSON 中出现了一个 "title":"System.out.println("hello world!");"
key-value 组合。然而实际上 JSON 只会将 "System.out.println("h
解析成 value,之后出现的 h
被当成非法字符报错。
定位问题之后,暂时修改文章的标题为 hello world! | 算法花园,绕过部署失败。
博客折腾记:主题更新、迁移博客到腾讯云COS以及解决百度收录
本周有空对博客进行新一轮折腾,现在将这些尝试记下来和大家分享。
我在 博客折腾记:使用 Travis CI 自动部署 中提到将主题以 modules 的形式加入主仓库。而且现在使用的主题 git 仓库是我自己 fork 的,也有一些修改。几个天之前,hexo-theme-even 的 master 接受 feat: add LaTeX support by JieJiSS · Pull Request #236 ,完成对 LaTeX 公式的支持。所以,我需要将使用的代码和最新的代码合并。
这里使用的是 github Pull request 功能。在你自己 fork 的仓库的网页上点击 new pull request
,然后按照下图修改。就会生成一个新的 Pull request 。
而且,如果你没有修改过原来的代码,PR 能自动合并。不过由于我对代码做了一些修改,会产生一些冲突,需要手动解决冲突(这里推荐使用 VS code)。出现下图的情况即成功合并两个库。
完成 PR 后,进入你站点下面的对应主题目录,使用 git checkout master
切换到主题的 master 分支,使用 git pull origin master
拉取最新的代码。回退到站点目录下,利用 git add
更新。
利用腾讯云存储博客的静态文件,并配合使用 CDN 可以加快国内的访问速度。参考 Hexo博客迁移之旅(Coding到腾讯云COS)+ Travis CI持续集成 - 个人文章 - SegmentFault 思否 以及 如何在腾讯云COS部署HEXO博客 - 云+社区 - 腾讯云 。
记录两个我遇到的坑。
完成 COS 配置后,需要将博客域名解析到腾讯提供CDN节点上的地址。
为了发布到 COS,站点的 _config.yml
会添加下面的代码。
1 | deploy: |
其中出现的 secretId 以及 secretKey 是私钥,不要在公开仓库展示。通过Travis-ci 中添加 Environment Variables 解决。
很多教程里,他们的 _config.yml
不会出现 secretId 和 secretKey 这两行,取而代之的是让你在 .travis.yml
添加几行。
1 | script |
按照这样设置,build 时,出现错误提示如下:
1 | { error: |
出现这个问题是 hexo -d
时,_config.yml 无法获得环境变量 secretId 和 secretKey 的。会导致没有秘钥。
参考 使用 Travis CI 部署你的 Hexo 博客 - 知乎 ,在 .trvis.yml 文件的 hexo d
命令前,加入下面两行即可解决。
1 | - sed -i "s~XXX_ID~${secretId}~" _config.yml |
之后build 时,会自动利用环境变量中 secretId 和 secretKey 的值替换 _config.yml
文件缺省的值。
最后提供我的两份配置文件给大家参考:_config.yml、.travis.yml。
之前,我一直将博客的静态文件存储在 github 的项目中,也使用插件生成 baidusitemap 文件。但是由于一些不为人知的秘密,百度的爬虫实际上无法爬取 github 上的资源,导致博客最新的文章没有被收录到百度中。
而且从百度提供的抓取诊断上来看,配置腾讯云 COS 后,百度的爬虫依然访问的是 github 上的仓库。
一顿搜索之后,找到一个主动提交 hexo 博客链接至百度的插件 huiwang/hexo-baidu-url-submit。
参考 Hexo插件之百度主动提交链接 | 王辉的博客 以及 Hexo百度主动提交链接 - 简书 完成配置。
cnpm install hexo-baidu-url-submit --save
config.yml
文件,配置 baidu_url_submit 和 deploy。1 | baidu_url_submit: |
上面的代码中出现一个 token,由于这是一个私有的,不能出现在 github 公开的仓库中。所以也需要 Travis-ci 中添加 Environment Variables 解决。和前文提到相同,在 .travis.yml
中添加 - sed -i "s~your_token~${BD_TOKEN}~" _config.yml
解决私钥问题。
最终在 travis-ci 中发现下面的日志即配置成功。另外一点,百度的站长平台的数据不能及时展示我们提交后的结果,需要耐心等待。
毕业之后开始工作快要 5 个月了,然后也快有 3 个月没有更新博客。其实文本编辑器中还有很多的草稿,但是一直没有力量驱动自己完结他们,并且分享出来。另外,这一段时间也不是完全没有分享。在这个页面的上方有一个 Tech
的标签,可以连接到我新搭的博客。受限于当前使用的 hexo 主题无法配置 latex 数学公式,所幸新开博客分享算法学习的笔记。大家感兴趣的可以访问一下,不过也没有太多的内容。
这次在博客公告中要告诉大家的确是另外一件事情。屋漏偏风连夜雨,不知道从什么时候开始,七牛云开始图片使用测试域名,毫无疑问这个博客的图片都挂了。自己也一直没有动力修复,让这一段时间访问我博客的小伙伴受累了。
今天研究了一下如何修复这个图床问题。官方有一个帮助页面如何配置域名的 CNAME - 七牛开发者中心,大概就是你的存储空间之前有一个测试域名(比如我的是 7xkpe5.com1.z0.glb.clouddn.com),现在不允许通过测试域名访问图片,需要绑定一个备案过的域名才可以。所以我们需要两个步骤完成改造:首先,给空间绑定一个域名(比如现在使用的是 media.xiang578.com );最后,在域名解析平台添加一个 CNAME,将你指定的域名转发到七牛的记录上。
完成上一步后,图片还是不能正常显示。因为之前的文章中,图片的链接都是以测试域名开头的,比如7xkpe5.com1.z0.glb.clouddn.com/15283589946007.jpg
,现在我们要将它改成 下面的形式 media.xiang578.com/15283589946007.jpg
。简单的方法是打开文本编辑软件,然后使用查找替换功能,一个一个文件处理。显然这很无聊,而且进入 source/_posts
目录下利用 grep 7xkpe5 *.md | wc
统计了一个,我大概需要修改的有 142 处。
幸运地是 linux 系统下有两大文本处理利器 sed
和 awk
。我们使用 sed
可以将一个字符串转换为另外一个字符串。网上搜索了一下用法,很快写了出来
1 | sed -i -r "s/7xkpe5\.com1\.z0\.glb\.clouddn\.com/media\.xiang578\.com/g" *.md |
这条命令中原始形态可以表示为 sed 's/原字符串/替换字符串/g'
。其中参数 -i
代表替换文件中的所有匹配项,-r
代表批量替换支持扩展表达式。在原字符串和替换字符串中都出现了 \.
,应为 .
在 sed
命令中代表匹配任意单个字符,加上转移字符后可以代表它本身。最后 *md
代表对目录下的 md
文件进行处理。
运行完成之后,我们在统计一下测试域名和正式域名的数量,可以发现完美的解决了这个问题,图片又能正常显示。
所以,写下今天这一篇博客一切都是因为贫穷。如果有钱直接在主机上放置图片,有带宽提供出来访问,也就不会依赖七牛云了……
2019.11.09
为了减少博客依赖服务,参考 图床从七牛云迁移到腾讯COS折腾笔记 | 思想就是武器 将所有的图片全部从七牛上下载,利用 COS 存储。
已切换到 Github Action
之前一周在封闭接受公司培训,最重要的任务是熟悉「项目开发全流程」。其中有一点:服务的稳定性。不知道为什么,前几天自己的博客崩溃了,输入域名只能看到 404 页面。当时以为是 Travis CI 的原因,所以进行了全面的一次排查:
其实看一眼就应该知道,我的博客是基于 hexo 搭建的,文件托管在 github 仓库中。不过,按照之前的设想博客应该在 Coding 中也有一份备份。后来由于一些原因,在利用 hexo 生成静态文件之后,自动推送到 Coding 上的命令不起作用。自己也没有时间去排查问题,所以最近访问速度有点慢。
传统的 hexo 博客更新过程是:在完成写作之后,利用命令行调用 hexo g && hexo d
来生成静态博客文件以及并推送到远端的仓库中。这种方法会产生三个痛点:
Travis CI 是一种持续集成开发所使用的工具,在写作过程中引入他可以解决上面我提到的痛点。Travis CI 具体的含义也不是很清楚,直接介绍我是怎么使用的。
博客依赖 3 个 git 仓库:
和大部分人一样,这个博客的静态文件保存在 github 的 xiang578.github.io 仓库 master 分支中。但是,我还创建了一个新的分支 hexo,用来保存博客源文件。每一次修改博客源文件之后,我不在本地生成静态文件,而是利用 git 命令,将所有的修改内容推送到仓库中的 hexo 分支。Travis CI 服务监听到新的 push 时,会根据你的配置将 git 仓库拉倒他的服务器上,编译源文件成为静态文件,并推送生成的文件到指定仓库的指定分支中。而且,如果编译静态文件失败,他也会通过邮件通知你结果。
git checkout -b hexo
创建并进入新的分支,删除分支内所有的文件。.travis.yml
文件,文件内容可以参考下一节 Travis-ci 配置文件。themes/xxx
是通过 git clone 下载的,无法直接 push 包含嵌套关系的 git 库。git modules
引用依赖库。所幸还能编辑 .git/config
,添加下面几行代码解决:themes
对应的 github 网页,你会看到主题链接到其他仓库(其中 @commitid 控制对应的版本)1 | language: node_js |
在这一次的过程中,又遇到两个本地编译 hexo 的错误,一同记录一下。错误表现如下:
1 | ERROR Plugin load failed: hexo-renderer-sass |
网上的建议是修改 npm 的源地址为淘宝的镜像,并且重新下载这两个包。
1 | sudo npm config set registry https://registry.npm.taobao.org |
前几天,看到其他人在 V2 上讨论利用 Docker 更新 hexo 博客。不过自己对使用 Docker 不是很感兴趣,倒是了解到 Travis CI 的作用。
参考使用 Travis 自动构建 Hexo 到 GitHub | Zthxxx’s Blog和使用travis-ci自动部署Hexo到github和coding - 掘金这两篇文章,完成了博客自动部署的修改,也解决了一些,之前没有在意的问题,写下来备忘一下。
介绍一下与这个博客先关的 git 项目。博客相关的原始文件放在 xiang578/blog,主题文件放在 xiang578/hexo-theme-even: A super concise theme for Hexo(我对这个主题有一些修改,所以自己 fork 了一份,最后发布的文件放在xiang578/xiang578.github.io: Welcome to My blog!(实际上这也是一个备份,访问时的文件是从 coding 服务器上读取的)。
按照上面两篇博文配置好 Travis CI 之后,每次向存放博客原始文件的仓库 push 时,travis-ci.com 都会拉取代码进行 build ,成功之后会出现下图。
之前都是使用 git clone 下载主题的,如果把本机上的博客相关文件直接推送到 github 上会遇到问题。简单地说就是一个 git 文件夹包含了另外一个 git 文件夹。所以,需要使用 git modules
来解决。通过这种方法可以在 clone 主仓库时,会自动clone子仓库。
博客仓库中会链接到其他仓库,其中 @ 之后的那一串就是 commit 编号,主要是用来做版本控制的。
完成这样的设置,修改主题文件后,需要先将修改 push 到主题的仓库,然后在博客文件夹下 push 修改到远端仓库。最终,才能再网页上看到修改效果。