之前学习和工作过程中,经常会写一些东西,包括心得体会,一些笔记,自己的一些见解。本来一直在用语雀,最近突发奇想,打算把自己写的这些乱七八糟分享出来,搭个独立博客,和更多的朋友交流,不到之处也能让大家批评指正。
最终在WordPress、Hexo、VuePress这几个博客系统中选定了Hexo。优点很适合我,但是缺点也比较明显,各位看官酌情选择。
选择 Hexo 最主要的原因也在于发现了一个能无缝连接的神器——yuque-hexo,参考了网上很多文章,搞了几天,终于搭建好了我的博客。
我的新博客是基于
Hexo + 语雀 + yuque-hexo + web hook + severless + Github Actions
托管平台我选择的是
腾讯云的 COS 静态网站+自定义 CDN 加速

首先需要在本地初始化 hexo 仓库
npx hexo-cli init blog
npx 可以在不全局安装依赖情况下使用 hexo-cli 的命令
官方文档:yuque-hexo
npm i yuque-hexo

Access Token 即为 YUQUE_TOKEN
访问工作台=>账户设置=>账户管理=>个人路径,设置语雀的简易的个人路径(建议),拿到个人路径。



拿到上述的语雀个人路径和知识库路径,进行 hexo 的配置。
{
"name": "hexo-site",
"version": "0.0.0",
"private": true,
"scripts": {
"hexo:build": "hexo generate",
"hexo:clean": "hexo clean",
"deploy": "hexo deploy",
"server": "hexo server",
"hexo": "pnpm run hexo:clean && pnpm run hexo:build && pnpm run server",
"yuque:clean": "yuque-hexo clean",
"yuque:sync": "yuque-hexo sync",
"yuque": "pnpm run yuque:clean && pnpm run yuque:sync"
},
"hexo": {
"version": "6.3.0"
},
"yuqueConfig": {
"postPath": "source/_posts",
"baseUrl": "https://www.yuque.com/api/v2",
"adapter": "markdown",
"login": "iamjy", # 语雀个人路径
"repo": "iamjy", # 语雀知识库路径
"onlyPublished": true,
"onlyPublic": true
},
}
当我们开始时我们需要做如下准备:
● 域名 (需要备案,不备案可临时使用 COS 提供的临时域名)
● 腾讯云账号 开通 COS 服务(建议使用 V5 版本 COS 控制台,升级方法如下)
V4 和 V5 版本域名区分如下:
- V4 域名形如:examplebucket-1250000000.cossh.myqcloud.com
- V5 域名形如:examplebucket-1250000000.cos.ap-shanghai.myqcloud.com
如何升级到 V5 版本的源站域名
- 当您进入 CDN 加速配置编辑状态后再次保存,我们会自动为您升级到 V5 版本的 COS 域名
参考资料:一键部署 hexo 博客到腾讯云 COS 对象存储
访问腾讯云对象存储控制台=>基础配置=>静态网站,开启静态网站功能
访问腾讯云对象存储控制台=>域名与传输管理=>自定义 CDN 加速域名,配置自定义加速域名

这里贴上我的配置作为参考,没有贴出的都可以用默认配置,或根据自身情况设置。


如果域名在腾讯云,上一步配置自定义 CDN 加速域名的时候已经自动解析好了,如果域名在其他平台,登录相应平台的控制台,将域名指向上面 COS 控制台中显示的 CNAM 域名
首先我们需要在腾讯云控制台获取下列所需的配置参数:
进入访问管理=>密钥管理=>【新增密钥】=>获取 SecretId 和 SecretKey
这里建议可以新增子用户,并设置权限,获取子用户的密钥,这里不作赘述。
访问腾讯云对象存储控制台=>基本信息,获取存储桶名称和所属地域

首先我们需要在 github新建一个私有博客仓库(以下简称博客仓库),用于存放 hexo 源码,并与本地的 hexo 做关联。
所需的配置参数:
| SECRET_ID | 腾讯云的 SecretId |
|---|---|
| SECRET_KEY | 腾讯云的 SecretKey |
| YUQUE_TOKEN | 语雀的 Access Token |
| BUCKET | 腾讯云 COS 静态网站的存储桶名称 |
| REGION | 腾讯云 COS 静态网站的地域名称 |
访问GIthub Token 配置=>Generate new token=>勾选必要的参数,生成 token
注意下:这个 Token 只会出现一次,最好复制出来使用,如果忘记了,只能重新生成一个

Github Token 用途:
- 用来在流水线工作时,上传语雀文章到博客仓库。
- 下文中需要用到这个 token 外部调用 Github Actions
进入博客仓库的设置,配置 secrets。把之前获取的腾讯云的[SECRET_ID和SECRET_KEY](https://www.yuque.com/iamjy/iamjy/wgwlxu?inner=XtEPR)和语雀的[YUQUE_TOKEN](https://www.yuque.com/iamjy/iamjy/wgwlxu?inner=OUCqa)配置到这里。

SECRET_ID、SECRET_KEY、BUCKET、REGION用于上传静态网站文件到 COS,YUQUE_TOKEN用于拉取语雀的文章
GITHUB_TOKEN不用配置,可以在 Github Actions 中直接获取
在根目录新增.github/workflows/main.yaml文件
这里直接上代码:
name: Deplo To COS
on:
# 本地测试时可以开启,部署后不建议开启,因为会涉及到更改一些配置,会多次频繁触发构建
# 允许手动push触发
# push:
# branches:
# - master
# 允许外部仓库事件触发
repository_dispatch:
types:
# 这里的值需要和下文的云函数的event_type保持一致
- start
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 检查分支
uses: actions/checkout@master
- uses: pnpm/action-setup@v2.2.4
with:
version: 7
- name: 安装node环境
uses: actions/setup-node@master
with:
node-version: "16"
cache: "pnpm"
# - name: 缓存依赖
# uses: actions/cache@v1
# id: cache
# with:
# path: node_modules
# key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}
- name: 安装依赖
run: pnpm install
# if: steps.cache.outputs.cache-hit != 'true'
# run: |
# export TZ='Asia/Shanghai'
# npm install
- name: 安装COS相关依赖
run: |
sudo pip install coscmd
sudo pip install tccli
- name: 配置COS
env:
SECRET_ID: ${{ secrets.SECRET_ID }}
SECRET_KEY: ${{ secrets.SECRET_KEY }}
BUCKET: ${{ secrets.BUCKET }}
REGION: ${{ secrets.REGION }}
run: |
coscmd config -a $SECRET_ID -s $SECRET_KEY -b $BUCKET -r $REGION
tccli configure set secretId $SECRET_ID
tccli configure set secretKey $SECRET_KEY
tccli configure set region $REGION
- name: 拉取语雀的文章
env:
YUQUE_TOKEN: ${{ secrets.YUQUE_TOKEN }}
run: |
pnpm run yuque:clean
pnpm run yuque:sync
- name: 配置Git用户名邮箱
run: |
git config --global user.name "yszar"
git config --global user.email "yszar@vip.qq.com"
- name: 提交yuque拉取的文章到GitHub仓库
run: |
echo `date +"%Y-%m-%d %H:%M:%S"` begin > time.txt
git add .
git commit -m "Refresh yuque json" -a
git pull origin master
- name: 推送文章到仓库
uses: ad-m/github-push-action@master
with:
# GITHUB_TOKEN不用配置在secrets
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: 生成静态文件
run: |
pnpm run hexo:clean
pnpm run hexo:build
- name: 上传文章到cos并刷新CDN
run: |
coscmd upload -rfs --delete ./public/ /
tccli cdn PurgePathCache --cli-unfold-argument --Paths https://iamjy.com/ --FlushType flush
# -*- coding: utf8 -*-
import requests
def main_handler(event, context):
r = requests.post("https://api.github.com/repos/你的用户名/你的仓库名/dispatches",
json = {"event_type": "start"},
headers = {"User-Agent":'curl/7.52.1',
'Content-Type': 'application/json',
'Accept': 'application/vnd.github.everest-preview+json',
'Authorization': 'token Github访问token'})
if r.status_code == 204:
return "This's OK!"
else:
return r.status_code
event_type 说明
event_type 值需要和 Github Actions 中配置的 repository_dispatch 的 types 值保持一致
Authorization 说明
Authorization 值为 字符串 "token Github 访问 token",不要忘了加 token


访问博客知识库=>设置=>消息推送,选择其他渠道,设置机器人名称和上文获取到的云函数地址,选择触发条件

发布文档和更新文档,需要选择文档有较大更新,推送给关注者,才会触发 webhook。

但是经过我的测试,一旦某一篇文章选择文档有较大更新,推送给关注者。后续的更新,不管选没选文档有较大更新,推送给关注者,都会触发 webhook。
如果因为部署频繁导致出错的话,建议选择评审阶段触发。也可以每次通过测试按钮手动触发。
无论是发布新文章还是更新删除等等操作,只要选择文档有较大更新,推送给关注者即可自动触发。
由于语雀的图片由有防盗链的限制,会导致部署后,博客网站显示图片异常。
处理办法有两种:

package.json{
"name": "hexo-site",
"version": "0.0.0",
"private": true,
"scripts": {
"hexo:build": "hexo generate",
"hexo:clean": "hexo clean",
"deploy": "hexo deploy",
"server": "hexo server",
"hexo": "pnpm run hexo:clean && pnpm run hexo:build && pnpm run server",
"yuque:clean": "yuque-hexo clean",
"yuque:sync": "yuque-hexo sync",
"yuque": "pnpm run yuque:clean && pnpm run yuque:sync"
},
"hexo": {
"version": "6.3.0"
},
"yuqueConfig": {
"postPath": "source/_posts",
"baseUrl": "https://www.yuque.com/api/v2",
"adapter": "markdown",
"login": "iamjy",
"repo": "iamjy",
"lastGeneratePath": "lastGeneratePath.log",
"onlyPublished": true,
"onlyPublic": true,
"imgCdn": {
"enabled": true,
"imageBed": "cos",
"bucket": "iamjy-hexo-xxxxxx",
"region": "ap-shanghai",
"prefixKey": "blog-images"
}
}
}
imgCdn 语雀图片转腾讯云 COS 图床配置说明
注意:开启后会将匹配到的所有的图片都上传到 COS
| 参数名 | 含义 | 默认值 |
|---|---|---|
| enabled | 是否开启 | false |
| bucket | 腾讯 COS 的 bucket 名称 | - |
| region | 腾讯 COS 的 region(地域名称) | - |
| prefixKey | 文件前缀 | - |
prefixKey 说明:
如果需要将图片上传到 COS 的根目录,那么 prefixKey 不用配置。
如果想上传到指定目录blog/image下,则需要配置prefixKey为"prefixKey": "blog/image"。
目录名前后都不需要加斜杠
上传到 COS 图床也是需要腾讯云的SECRET_ID 和 SECRET_KEY作为环境变量注入的,但在之前的流程中,我们已经在博客仓库的 secrets 注入了,所以这里就不需要再额外注入了。
更多详情介绍请移步:yuqe-hexo-with-cdn
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon
我正在尝试使用Sinatra中的重定向和session在网站周围传递一些数据。这是一个简化的示例,使用PrettyPrint进行调试:require'pp'require'rubygems'require'sinatra'enable:sessionsget'/'dosession[:foo]='12345'puts'session1'ppsessionredirectto('/redir')endget'/redir'doputs'session2'ppsession'helloworld'end查看Thin的输出,我看到:>>Listeningon0.0.0.0:4567,CTRL
TL;DR:IneedtogetthedifferencebetweenHH:MM:SS.msandHH:MM:SS.msasHH:MM:SS:ms我需要什么:这是一个棘手的问题。我正在尝试计算两个时间戳之间的差异,如下所示:In:00:00:10.520Out:00:00:23.720应该交付:Diff:00:00:13.200我想我应该将时间解析为实际的Time对象并在那里使用差异。这在前一种情况下效果很好,并返回00:0:13.200。什么不起作用:然而,对于某些人来说,这并不能正常工作,因为Ruby使用usec而不是msec:In:00:2:22.760Out:00:2:31.
我很困惑如何做到这一点。我需要获取一个日期时间对象,并获取当前时间的持续时间(以小时、天等为单位)。谢谢。 最佳答案 获取以秒为单位的持续时间很容易:>>foo=Time.new=>MonDec2918:23:51+01002008>>bar=Time.new=>MonDec2918:23:56+01002008>>printbar-foo5.104063=>nil所以,五秒多一点。但要以更人性化的形式呈现它,您需要第三方添加,例如time_period_to_s,或Duration包。
一、介绍一下vercelvercel是一个站点托管平台,提供CDN加速,同类的平台有Netlify和GithubPages,相比之下,vercel国内的访问速度更快,并且提供Production环境和development环境,对于项目开发非常的有用的,并且支持持续集成,一次push或者一次PR会自动化构建发布,发布在development环境,都会生成不一样的链接可供预览。但是vercel只是针对个人用户免费,teams是收费的首先vercel零配置部署,第二访问速度比github-page好很多,并且构建很快,还是免费使用的,对于部署个人前端项目路、接口服务非常方便vercel类似于git
我正在尝试在我的实用程序中设置渐进式参与,人们无需注册即可使用,例如notepad.cc和jsfiddle.net以及我计划在用户“写入”应用程序时为用户创建一个guest用户(使用Devise)。我在Devisewiki上找到了这个指南https://github.com/plataformatec/devise/wiki/How-To:-Create-a-guest-user它显示了如何在浏览器session期间创建访客用户。我想要的是用户在后续访问中继续使用相同的访客帐户,直到他注册为止,也许当我推出更多功能的订阅计划时。如何修改指南中的内容以实现此目的?上面链接的指南中的代码:
ChatGPT是一款引人注目的产品,它的突破性功能在各个领域都创造了巨大的需求。仅在发布后的两个月内,就累计了超过1亿的用户。它最突出的功能是能够在几秒钟内完成各种文案创作,包括论文、歌曲、诗歌、睡前故事和散文等。与流行的观点相反,ChatGPT可以做的不仅仅是为你写一篇文章,更有用的是它如何帮助指导您的写作过程和写作方法。接下来手把手教你利用ChatGPT辅助完成写作的五种方法。1.使用ChatGPT生成论文的观点在开始写作之前,我们需要让ChatGPT帮我们充实想法,找到论文切入点。当老师布置论文时,通常会给予学生一个提示,让他们可以自由地表达和分析。这时,我们需要找到论文的角度和思路,然
最近我使用了一个由单个开发人员创建的不错的gem,它托管在Github上。在我的工作中,我不得不对它进行一些实质性的修改,添加一些改进。有些是特定于项目的,有些是特定于gem的,还有一些是独立的改进。对于特定于gem的改进(例如,错误修复),我fork了存储库,应用了修复,并提出了拉取请求。然后,然而,我注意到独立的改进有点属于原始gem的并行、持续的分支类别。更清楚地说,你以前见过它;我重写了原始gem的View以使用TwitterBootstrap框架。因此,我也将它推送到了Github,但是,当然,我没有提出拉取请求——相反,我更新了README以解释不同之处,并感谢gem的原作
我有一个关于如何在示例之间共享rspec-mocks的double的问题。我正在使用rspec-mocks3.1.3编写一个新的Rails应用程序。我习惯于使用旧的(我有一个模型方法:defself.from_strava(activity_id,race_id,user)@client||=Strava::Api::V3::Client.new(access_token:'abc123')activity=@client.retrieve_an_activity(activity_id)result_details={race_id:race_id,user:user}result_