解决 etcd 与 grpc 不兼容问题

今天遇到了一个 Golang 的依赖问题,在一个使用了 Protobuf 的项目,引入了 Prometheus 的 Package 之后编译时发现 etcd 报错:

# github.com/coreos/etcd/clientv3/balancer/resolver/endpoint
../../go/pkg/mod/github.com/coreos/etcd@v3.3.18+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:114:78: undefined: resolver.BuildOption
../../go/pkg/mod/github.com/coreos/etcd@v3.3.18+incompatible/clientv3/balancer/resolver/endpoint/endpoint.go:182:31: undefined: resolver.ResolveNowOption
# github.com/coreos/etcd/clientv3/balancer/picker
../../go/pkg/mod/github.com/coreos/etcd@v3.3.18+incompatible/clientv3/balancer/picker/err.go:37:44: undefined: balancer.PickOptions
../../go/pkg/mod/github.com/coreos/etcd@v3.3.18+incompatible/clientv3/balancer/picker/roundrobin_balanced.go:55:54: undefined: balancer.PickOptions

根据问题搜索到 issue:clientv3: grpc-go (v1.27.0) made API changes to balancer / resolver. #11563,依据里面的方法将 grpc 降级到 v1.2.6.0

Kubernetes 部署 ElasticSearch7 集群

组建 ES 集群

在 Kubernetes 集群上部署 ElasticSearch 的时候,我先按照网上的经验指南,发现 ES 节点之间无法互相发现,不能够组成集群。

对比后发现,我使用的 ES 版本是7.2,而目前我参照的大部分网页都是 6.8的。在 7.0 之前的协调方式是配置discovery.zen.minimum_master_nodes,让集群自行选举为指定数量的 master 节点。

从零开始配置Rime - 2019

本文是个人配置,仅供方法参考。

步骤一 - 安装

首先下载安装 Rime。

通过官网下载安装
https://bintray.com/rime/squirrel/release
通过 Homebrew
brew cask install squirrel

步骤二 - 配置

东风破

東風破中州韻輸入法引擎 的配置管理工具。

克隆仓库

git clone --depth 1 https://github.com/rime/plum.git
cd plum

生成配置模板

bash rime-install prelude luna-pinyin double-pinyin

步骤三

# squirrel.custom.yaml
patch:
  us_keyboard_layout: true # 鍵盤選項:應用美式鍵盤佈局
  show_notifications_when: growl_is_running # 狀態通知,默認裝有Growl時顯示,也可設爲全開(always)全關(never)
  style:
    color_scheme: psionics
    horizontal: true # 水平/竖直显示
    inline_preedit: false # 非內嵌編碼行
    border_color_width: 0
    border_height: 6
    border_width: 6
    candidate_format: '%c %@'
    corner_radius: 5
    font_face: PingFangSC
    font_point: 16
    hilited_corner_radius: 3
    label_font_point: 14

  'com.apple.Finder/ascii_mode': true
# default.custom.yaml
# 中西文切換鍵的默認設置寫在 default.yaml 裏面
# 以下的 default.custom.yaml 在全局範圍重定義該組快速鍵
#
# 可用的按鍵有 Caps_Lock, Shift_L, Shift_R, Control_L, control_R
# Mac 系統上的鼠鬚管不能區分左、右,因此只有對 Shift_L, Control_L 的設定起作用
#
# 已輸入編碼時按切換鍵,可以進一步設定輸入法中西文切換的形式。
# 可選的臨時切換策略有三:
# inline_ascii 在輸入法的臨時西文編輯區內輸入字母、數字、符號、空格等,回車上屏後自動復位到中文
# commit_text 已輸入的候選文字上屏並切換至西文輸入模式
# commit_code 已輸入的編碼字符上屏並切換至西文輸入模式
# 設爲 noop,屏蔽該切換鍵
#
# 如果要把 Caps Lock 設爲只改變字母的大小寫而不做中西文切換,可將 Caps_Lock 對應的切換方式設爲 noop
# 如果要以 Caps Lock 切換到西文模式,默認輸出小寫字母,請置 ascii_composer/good_old_caps_lock: false
# 如果要以 Caps Lock 切換到西文模式,默認輸出大寫字母,請使用以下設置:

patch:
  schema_list:
    - schema: double_pinyin_flypy
    - schema: luna_pinyin_simp
  switcher/hotkeys:
    - F4
  switcher/save_options:
    - full_shape
    - ascii_punct
    - simplification
    - zh_hans
    - emoji_suggestion
  menu/page_size: 8
  ascii_composer/good_old_caps_lock: false
  ascii_composer/switch_key:
    Caps_Lock: noop
    Shift_L: commit_code
    Shift_R: commit_code
    Control_L: noop
    Control_R: noop
  key_binder/bindings:
    - { accept: 'Control+p', send: Up, when: composing }
    - { accept: 'Control+n', send: Down, when: composing }
    - { accept: 'Control+b', send: Left, when: composing }
    - { accept: 'Control+f', send: Right, when: composing }
    - { accept: 'Control+a', send: Home, when: composing }
    - { accept: 'Control+e', send: End, when: composing }
    - { accept: 'Control+d', send: Delete, when: composing }
    - { accept: 'Control+k', send: 'Shift+Delete', when: composing }
    - { accept: 'Control+h', send: BackSpace, when: composing }
    - { accept: 'Control+g', send: Escape, when: composing }
    - { accept: 'Control+bracketleft', send: Escape, when: composing }
    - { accept: 'Alt+v', send: Page_Up, when: composing }
    - { accept: 'Control+v', send: Page_Down, when: composing }
    # - {accept: ISO_Left_Tab, send: "Shift+Left", when: composing}
    - { accept: 'Shift+Tab', send: Page_Up, when: composing }
    - { accept: Tab, send: Page_Down, when: composing }
    - { accept: minus, send: Page_Up, when: has_menu }
    - { accept: equal, send: Page_Down, when: has_menu }

步骤四 - Emoji

bash rime-install emoji
bash rime-install emoji:customize:schema=luna_pinyin
bash rime-install emoji:customize:schema=double_pinyin

步骤五 - 扩充词库

git clone https://github.com/rime-aca/dictionaries.git

luna_pinyin.dict/下的以下文件拷贝到~/Library/Rime

转移域名,更换评论系统,更换图床

一、域名从阿里云转移到 Porkbun

原来域名是在阿里云上,续费价格为¥89,这样的价格对于 ME 这种活动很少的域名来说已经是比较实惠了。找了一圈也并没有发现有什么特别实惠的注册商。但是想尝试一下其他域名服务商,就选择了 Porkbun,续费价格为$12.48,其实只比阿里云便宜¥3。

搭建 NPM Proxy 之预编译包

背景

上一篇 搭建 NPM Proxy 成功搭建了一个 NPM 代理,但很快就又遇到问题了:node-sass 这种典型的有预编译包,而且需要到 GitHub 下载的 Package,安装就会失败。

寻找原因

我们的 NPM Proxy 已经将所有包重定向至 taobao registry,tarball(源码包)也完全是从 taobao 源下载的,然后我根据 cnpm 的首页例子尝试: