作者归档:白宦成

关于白宦成

独立开发者, 自由职业者, 写作者

用 HomeBrew 安装字体

我因为有一些时候需要做 PPT,需要安装一些特定的字体,但是 macOS Catalina 的 字体册应用总是 Crash ,因此,我决定使用 HomeBrew 来安装字体

配置 Tap

使用 Homebrew 安装字体,就需要配置相应的 Tap (可以理解为 Ubuntu 中的 Source 和 CentOS 中的 Repository。

brew tap homebrew/cask-fonts

安装字体

执行命令,就可以安装相应的字体。

brew cask install font-noto-sans-cjk-sc
brew cask install font-noto-serif-cjk-sc
brew cask install font-jetbrains-mono
brew cask install font-source-han-noto-cjk

如果你想要搜索一个字体怎么办?打开 Github 页面

在其中点击 Find File

并在新的界面中输入你想要的字体的英文名,比如 Ubuntu

去掉最后的 .rb ,就是你安装时使用的字体名,比如,安装 Ubuntu 字体,只需要执行 brew cask install font-ubuntu

如何免费为你的组织项目配置 Vercel

如何免费为你的组织项目配置 Vercel

前言

Vercel 是我自己非常喜欢的平台,我自己的一些项目都会选择使用 Vercel 来部署。比如 LogolyEasyWPBook 等等。

主要是其在中国大陆的访问速度是比 Netlify 和 Github Pages 更快。但不得不说的是,Vercel 提供了 Production 环境和 Development 环境,对于项目开发时是非常有用的,当你提交一个 commit 或者是一个 PR 时, Vercel 会自动帮你部署,并将相应的 URL comment 到你的 commit 或 PR 下,你只需要点击相应链接,就可以预览效果,十分方便。

但 Vercel 的 Teams 功能是付费的,对于一些 Organization 来说,你需要付费用 Vercel 成本是比较高的。特别是如果你是一个 OpenSource Project,你大概率入不敷出。在这种情况下,如何才能在 Organization Project 中免费使用 Vercel 呢?我考虑了一个绕过去的方法。

我们之所以无法使用在项目中无法免费使用 Vercel 是 Vercel 的产品策略问题。

而我们被禁用的无法使用官方自建的 Github Apps 来部署,但不意味着我们不可以自己实现这样的逻辑,来实现在组织内项目进行push。

而想要达成这样的效果,需要你具备两个条件

  1. 你的代码每一次提交都会自动触发 CI
  2. 你的 CI 中可以自动上传代码到 Vercel

而前者,可以通过 Github 提供的 Action 来完成。后者则可以通过编写代码来完成。不过好在,我在 Github 的 Marketplace 中找到了别人已经写好的 Action ,因此又可以少写一些代码(开心?)。

接下来,看看具体要如何操作。

步骤

安装依赖

在进行后续的操作之前, 你需要先安装配置过程中的依赖。

执行如下命令安装 Vercel CLI

npm i -g vercel

创建一个项目

为了正常部署,你需要创建一个项目,并将其 push 到 Github。当然,如果你已经创建好了项目,就直接把项目 Clone 到本地就好。

使用 Vercel 部署这个项目

这一步是为了在 Vercel 上创建一个项目,因为 Vercel 不支持通过网页端创建项目,只支持在 CLI 或通过 Git 接入自动创建。

在你的项目根目录,执行命令 vercel 来触发 Vercel 的部署,它会自动上传你的项目到 Vercel 。如果你之前登录过,会看到类似这样的界面,根据其提示进行配置就好。如果你之前没有登录过,你登录后会出现类似的界面。根据提示进行配置。

获取配置

想要部署一个项目到 Vercel ,你需要知道三样东西

  1. Access Token: 用于 CLI 的登录和 API 的调用,没有 Access Token ,Vercel 就没有办法获取到你的用户身份,进行鉴权校验。
  2. Org ID:Org ID 是指你在 Vercel 上的用户 ID。由于 Vercel 中一个人其实可以管理和配置多个 Team ,因此需要借助 Org ID 来指定要管理哪个账号下的项目。
  3. Project ID:很好理解,如果你要管理 Project ,就需要一个 Project ID。

其中,Access Token 你需要从 Vercel 后台的 Tokens 页面获取。

而 Org ID 则可以从你的项目中的 .vercel/project.json 中获取。你会获得类似下面这样的内容,其中的 OrgID 就是你在 Vercel 上的 ID ,而 Project ID 就是对应的项目 ID。

{"orgId":"r359XAnYONVAmiXtdxZ22A2E","projectId":"Qma3GdwoiAfJSsbsSydBgaCDh8LJj6wTWvvqpUwrN6J2F3"}

准备好了这三项以后,就可以进入到下一个环节,配置 Action Secret 了。

配置 Github Action Secret

Github Action 提供了 Secret 的机制,用来让你保存哪些安全密钥,避免直接写在 Action File 中,出现泄漏的可能。

打开你的项目的 Settings – Secrets 页面

在这里你可以新增 Secret ,你需要新增三个 Secret ,分别是

  • ORG_ID: 填写你从 .vercel/project.json 中获取到的 orgId;
  • PROJECT_ID:填写你从 .vercel/project.json 中获取到的 projectId;
  • VERCEL_TOKEN:填写你从 Vercel 后台生成的 Token。

这样,就配置好了 Secret ,接下来就可以在你的项目中加入 a、Action 配置文件,完成项目的配置。

添加 Action 配置文件

根据 Github 的规范,你需要将你的 Action 配置文件放置在项目根目录的 .github/workflows/xxx.yml 文件中,其中 xxx 是你的 Action 名,比如叫 vercel.yml

这里我使用的是 ngduc 写的 vercel-deploy-action

按照路径创建好 vercel.yml 文件,然后在其中加入如下代码

name: deploy website
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: ngduc/vercel-deploy-action@master
        with:
          vercel-cli: vercel
          vercel-token: ${{ secrets.VERCEL_TOKEN }}
          vercel-org-id: ${{ secrets.ORG_ID}}
          vercel-project-id: ${{ secrets.PROJECT_ID}}
          github-token: ${{ secrets.GITHUB_TOKEN }}

粘贴进去以后,将 vercel.yml 添加到 git 控制中,并提交到 Github 上,就可以实现触发 Vercel 了。

总结

虽然 Vercel 本身不能免费提供 Organization 的支持,但是我们可以通过一些小的技巧,绕过其官方的配置。对于一些只是将 Vercel 配置为开发者预览的场景下来说,还是足够的。

但如果你希望将 Vercel 配置为生产环境,那么 Teams Plan 可以提供的更多的权限控制,会是你需要的,买一个,也不贵,是吧?

hexo-generator-podcasts 一个强大的 Hexo 播客生成插件

hexo-generator-podcasts 是我近期开发的一款 Hexo 的播客生成器插件,hexo-generatro-podcast 可以帮助你在你的 Hexo 博客中加入播客的功能,你可以通过简单的配置,在自己的博客中加入播客的配置,轻松上架播客。

不仅如此,如果你需要部署多个播客,也可以直接借助这个插件,在一个站点中部署多个播客,特别适用于一些大型的播客组织,可以在一个站点同事部署多个播客。

如果你感兴趣,不妨去试试看: https://github.com/bestony/hexo-generator-podcasts/

此外,我自己的播客生产力维基,就是使用这个插件构建的。

腾讯系产品视觉设计规范八则

为什么要看腾讯的视觉设计方案?
体系化的品牌设计对于你做自己的品牌设计有一定的帮助。

一些不错的写作模板

都是来自于 Confluence 的模板,供写作参考。

应该如何使用这些模板?

这些模板我提供的都是图片,而非文本,一方面是其内容并非简单的通过一个文本就可以展示。对于真实的使用场景,可能你依然需要使用诸如 Notion、Coda、Evernote 之类的工具来展现。另一方面,这个模板更多是帮助你思考,如果我在做类似的事情的时候,可以加入哪些模板。

此外, Notion 也提供了不少的 Template ,值得你在使用的时候参考。

季度计划

年度计划

AWS 架构图

头脑风暴模板

一页纸商业计划

产品更新动态

个人职业生涯

内容设计规范

关键词表

内容策略

创意规划 Creative Brief

Customer Impact Assessment

设计组件

设计冲刺

设计系统

DevOps 变更管理模板

DevOps 行动手册

破坏性头脑风暴

邮件递送模板

商业执行反馈

实验模板

招聘方案

紧急情况沟通方案

故障事后总结

面试总结

IT 项目

Job Description

团队领导力指标

Master Document

会议纪要

更多模板可以去哪里找到?

实际上,Confluence 中还有大量的模板,不过我发现, Confluence 可以免费使用,所以,just register it,and use it。

进行 Hexo 开发时,如何去除缓存?

表现

最近我在开发一个 Hexo 插件,在开发的过程中,遇到了一些小的问题:插件的代码发生了修改,但运行hexo 的时候却没有实时刷新出来

原因

在对代码进行分析后发现,hexo 的 tag filter 的结果会缓存在数据库中,由于缓存了,所以我使用的 generator ,所以也会被缓存。

解决方案

在预览前,删除 db.json 即可让 hexo 重新开始生成

为了方便,我在 npm 的 scripts 中加入了一个自定义的配置

{
 ...
 "scripts":{
  ...
  "s": "rm db.json && hexo server"
  ...
 }
 ...
}

Golang 中如何为 XML 加入 CDATA 支持

需求

最近在参与 WavPub 的开发,在开发的过程中,需要调整 XML 的结构,因此,需要为一些字段加入 CDATA 的支持。

问题

在阅读了 eduncan911/podcast 中的代码后发现,这个包在生成 XML 的时候,使用的是 Golang 核心库中的 encoding/xml 包,而这个包在使用的时候有一个问题,你可以给其字段加入 ,cdata 来完成加入 cdata 的标签,但问题在于,他的实现是,在你的字段外部加标签,而不是内部加标签。举个例子来说,就是,如果你定义了字段为 xml:”category,cdata” 你得到的会是

<![CDATA[ somecode ]]>

而非我们想要的

<category> <![CDATA[ xxx ]]> </category>

实现

想要解决这个问题,就需要你在你的字段中实现一层包裹,在其自动生成的 CDATA 外层加入一层 XML ,这样就可以实现我们想要的效果,比如说我上面的效果可以通过定义一个新的 Description 的 Struct 来实现

package podcast
import "encoding/xml"
// Description represents text inputs.
type Description struct {
	XMLName xml.Name `xml:"description"`
	Text    string   `xml:",cdata"`
}

然后,再在需要的地方,加入相应的引用就好

type Podcast struct {
	XMLName        xml.Name `xml:"channel"`
	...
	Description    *Description
        ...
}

Reference

https://pkg.go.dev/encoding/xml?tab=doc

https://play.golang.org/p/xRn6fe0ilj

自用 App 推荐

自用 App 推荐

以下这些 App 都是我自己在用的,一些比较小众的 App (支付宝、微信这种我觉得没有必要推荐,只写一些我自己在用的,但是绝大多数人不知道或没有用过的 App)

名称用途介绍价格购买地址
ServerCatiOS 端的 SSH 工具,可以用来连接服务器 & 管理服务器,自带的服务器指标监控很好用。应用本身免费;内购 40 购买地址
熊猫吃短信基于机器学习的短信过滤应用,非常好用,我装了以后就很少打开了,过滤的很准。¥3购买地址