WordPress
没有像大城市里的Z时代青少年一样在初中高中就开始折腾各种网络安全,编程技术,折腾博客,我在大二时才有建一个网站的想法,买了阿里云的ECS,买了域名,装了宝塔,然后LNMP一键启动,WordPress无脑梭哈,还折腾了备案,但是除了写了几个测试的文章,后面续费云主机的动力都没有了,于是索性连域名也卖了,记得好像是十几块钱买的,还卖了9块钱。我的博客从网络世界消失了,对于我来说,我知道了原来网站是这么运行的,原来还有宝塔和WordPress这么牛逼的工具,原来备案TM的这么麻烦!
Hexo
再后来技术上走向正规,经常查一些技术文章,看到别人写的博客,知道了Hexo,知道了Github Page,开始折腾静态博客,使用Hexo和使用人数最多的主题Next,再结合网络上的各种方案魔改,当时我想的就是“整挺好,以后就这样不换了”。Hexo是截止我写这篇文时用的最久的框架,相处久了,了解的多了,遇到麻烦的次数也就多了。
Vuepress
期间还折腾了文档站点,看到了别人的文档站点挺好的,我的一些文档也可以放进文档站点作为文档库啊,然后又开始了VuePress、Docusaurus,因为抱着一旦启用就不换的决心,每个方案都折腾了不少时间,最终我的Github仓库还残存着一个Docs的仓库,然后我发现文档这个东西就是个伪需求,就此作罢。
Hexo in Docker
一开始Hexo运行在Mac上,我不敢随便重置系统,后来对Docker的运用加深,开始折腾在Docker里运行Hexo,也还算顺利。Dockerfile存在Dropbox里,存在iCloud里,非常的安稳和踏实,但是后面的事告诉我事情没这么简单,Dockerfile中每次都拉取latest的node基础镜像,git clone也是每次都是最新的,导致版本不兼容时就会有报错,或者是警告,这个问题不是不能解决,指定版本就好了呀,是的。但我还是开始嫌弃Hexo了,甚至我都没有继续写下去的动力了(借口),在群里吐槽Hexo的问题的时候,馆长说那你可以用Hugo啊,就一个可执行文件。此时Hexo的种种不好,都浮现脑海,速度慢,环境麻烦,node_modules……
Hugo
终于下定决心,试试Hugo
brew install hugo
hugo new site blod
cd blog
git clone [你的想要的主题] theme
hugo new post/frist.md
hugo server -D
不行我要开始无脑吹了,把之前的blog的markdown文件复制到Hugo目录,生成速度嗖嗖的,我选的非常精简的主题,摆脱了npm,摆脱了package.json,整个主题非常的简单,简洁,以前Hexo需要安装插件实现搜索,字数统计,Hugo全都聚合在了一个可执行文件里,有好处也有不好,好处是,不用折腾了,啥都有,坏处可能就好像花钱买了不需要的东西,目前这点坏处我是无所谓的。
我在选主题的时候的标准是,足够简洁(打开的速度够快),有搜索功能(我自己会记录一下文档,方便我自己搜索),最终我使用的Papermod,符合了我的要求,在此基础上进行了一些魔改,终于可以愉快的写作了,
从Hexo迁移到Hugo并不是无痛的,使用Python脚本修改了markdown的头部信息,提取头部信息里面的的title,通过百度翻译的API翻译成slug写进头部信息,作为文章的永久链接,而不是像之前一样的使用额外的插件生成随机的永久链接,还有一些细微的修改不在此赘述了。
import requests
import random
import json
from hashlib import md5
appid = "******************"
appkey = "*******************"
def bdtranslate(word):
word = word.replace('_', ' ').replace('-', ' ')
from_lang = 'zh'
to_lang = 'en'
endpoint = 'http://api.fanyi.baidu.com'
path = '/api/trans/vip/translate'
url = endpoint + path
query = word
def make_md5(s, encoding='utf-8'):
return md5(s.encode(encoding)).hexdigest()
salt = random.randint(32768, 65536)
sign = make_md5(appid + query + str(salt) + appkey)
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
payload = {'appid': appid, 'q': query, 'from': from_lang, 'to': to_lang, 'salt': salt, 'sign': sign}
r = requests.post(url, params=payload, headers=headers)
response_data = json.loads(r.text)
trans_result_list = response_data.get("trans_result", [])
for item in trans_result_list:
dst_value = item.get("dst")
if dst_value is not None:
return dst_value.replace(' ', '-').lower()
import os
import pangu
import re
import yaml
from translate import bdtranslate
def replace_front_matter(match):
front_matter_str = match.group(1)
front_matter = yaml.safe_load(front_matter_str) # 仍然使用yaml来解析原始front matter
front_matter.pop('abbrlink', None)
front_matter['title'] = pangu.spacing_text(front_matter['title']) # 使用pangu来处理标题
slug = front_matter['slug'] if "slug" in front_matter else bdtranslate(front_matter['title'])
date_str = ''
if 'date' in front_matter and hasattr(front_matter['date'], 'strftime'):
date_str = front_matter['date'].strftime('%Y-%m-%dT%H:%M:%S+08:00')
tags = front_matter.get('tags', [])
tags_str = ', '.join(tags)
new_front_matter_str = f"""---
title: {front_matter['title']}
slug: {slug}
tags: [ {tags_str} ]
date: {date_str}
---"""
return new_front_matter_str
file_list = os.listdir('./post')
for file_name in file_list:
file_path = os.path.join('./post', file_name)
with open(file_path, 'r+', encoding='utf-8') as f:
content = f.read()
new_content = re.sub(r'^---\n(.+?)\n---', replace_front_matter, content, flags=re.DOTALL)
print(new_content)
with open(file_path, 'w', encoding='utf-8') as f:
f.write(new_content)
以上两处代码其实可以优化,但是因为想着也就用一次,没有做太多的优化(懒,光想着折腾博客去了),在这里贴出来以防后续还有类似需求改改还能用。
意义
作为一个技术从业者,我觉得有博客是一件正常的事,可以是在开放平台,可以是自己的云主机上。我选择了最经济,最稳定,最省心的Github Page,虽然其他很多国外的平台也有类似的免费功能。后续可能会尝试,再说吧。好处是摆脱了审核,摆脱了备案,坏处是国内的普通用户打开可能会费点劲,我要发表暴论了 “不会FQ,你搞什么技术,你好意思说你是搞技术的?”
在简历上写了自己的博客地址,有没有面试官看过我无从得知,当然现在Hugo使用了Google Accounts能够获取到比之前多一点的信息了。
虽然我也听说过,写博客重要的是写,但是用起来顺手也是我非常重视的一点,搜索功能我是一定需要的,因为我会把它当做知识库。
当有人遇到问题,刚好博客里记录了这个问题时,我也会毫不犹豫的扔出博客链接,这可比重新打字去解释方便了不知道多少倍。