joe 4 년 전
부모
커밋
85a04971b2
6개의 변경된 파일149개의 추가작업 그리고 5개의 파일을 삭제
  1. 4 0
      README.md
  2. 83 0
      content/languages/go/go-tricks.md
  3. 1 1
      content/languages/v/docs_cn.md
  4. 18 1
      content/posts/daily-mysql.md
  5. 25 0
      content/res/self-hosted.md
  6. 18 3
      content/specs/alarm_server.md

+ 4 - 0
README.md

@@ -7,6 +7,10 @@
 ## languages/rust
 
 
+## languages/go
+
+- [go tricks](http://git.wanbits.io/joe/blog/src/master/content/languages/go/go-tricks.md)
+
 ## res
 
 - [工具和玩具](http://git.wanbits.io/joe/blog/src/master/content/res/tools.md)

+ 83 - 0
content/languages/go/go-tricks.md

@@ -0,0 +1,83 @@
+---
+title: "Go Tricks"
+date: 2021-11-12T11:33:36+07:00
+draft: false
+---
+
+## 编译
+
+`go build` 可以用 `-gcflags` 传递 go 编译器参数,帮助信息可通过 `go tool compile --help` 查看。 主要用 `-m` 参数检查代码的编译优化、逃逸、函数内联情况。
+
+也可以用 `-ldflags` 连给链接器传参,帮助信息可通过 `go tool link --help` 查看。 主要用途有
+
+- `-s -w` 来减小输出二进制的体积 (更小体积可加壳)
+> `-s`: 删除符号表,panic 时 stack trace 没有文件名/行号信息
+> `-w`: 删除 DWARF 信息,二进制无法通过 gdb 调试。
+- 利用 `go build -ldflags "-X main.version=1.1` 来进行编译时变量赋值(限 `string` 类型)
+
+
+## 条件编译
+
+go 中实现条件编译可以通过编译标签(build tag)和文件名(xxx_linux_x64.go)两种方式。
+
+### 编译标签(build tag)
+
+通过在源码文件顶部添加注释标签,来指示编译器条件编译动作
+
+```go
+// +build <tags>
+```
+
+<tags> 就是标签,可以有多个,多个标签的分割符用来指示标签之前的关系
+
+- 以空格分割表示 AND
+- 以逗号分割表示 OR
+- !表示 NOT
+
+标签可能指示的内容
+
+- **操作系统**。如 `linux, darwin, windows` 等,对应 $GOOS 的值
+- **操作系统架构**。如 `arch64, x64, i386`,对应 $GOARCH 的值
+- **编译器**。如 `gc, gccgo`
+- **是否开启 CGO**。 `cgo`
+- **go版本**。如 `go1.1, go1.1.2`
+- **自定义标签**。通过 `go build -tags <tags> 指定。
+
+举例
+
+```golang
+// +build linux,386 darwin,!cgo
+```
+表示编译条件为: (linux AND 386) OR (darwin AND !cgo)
+
+```golang
+// +build linux darwin
+// +build amd64
+```
+表示多个条件, (linux OR darwin) AND amd64
+
+```golang
+// +build ignore
+```
+表示此文件忽略,不参与编译。
+
+最后, `// +build <tags>` 的下一行必须为空行。
+
+### 文件名表示条件
+
+格式:
+```shell
+$filename_$GOOS.go
+$filename_$GOARCH.go
+$filename_$GOOS_$GOARCH.go
+```
+
+举例
+
+比如有两个文件 `setopt.go` 和 `setopt_linux.go` 执行
+
+```shell
+GOOS=linux go build
+```
+将编译后者。
+

+ 1 - 1
content/languages/v/docs_cn.md

@@ -9,7 +9,7 @@ draft: true
 ## 介绍
 
 V is a statically typed compiled programming language designed for building maintainable software.
-V 是一个静态编译型编程语言,被设计为构建可维护的软件。
+V 是一个静态编译型编程语言,被设计为用于构建可维护的软件。
 
 It's similar to Go and its design has also been influenced by Oberon, Rust, Swift,
 Kotlin, and Python.

+ 18 - 1
content/posts/daily-mysql.md

@@ -9,5 +9,22 @@ tags: []
 
 ```shell
 mysql> DESCRIBE business.student;
+mysql> DESC business.student;
 mysql> show create table business.student;
-```
+```
+
+### 用户和授权
+
+```shell
+CREATE USER 'username'@'host' IDENTIFIED BY 'password';
+GRANT privileges ON database.table TO 'username'@'host';
+
+# 举例
+
+CREATE USER 'admin'@'localhost' IDENTIFIED BY '123456';
+GRANT all ON *.* TO 'admin'@'localhost'
+
+CREATE USER 'admin'@'%' IDENTIFIED BY '123456';
+GRANT SELECT,INSERT ON test.user TO 'admin'@'%'
+```
+

+ 25 - 0
content/res/self-hosted.md

@@ -0,0 +1,25 @@
+---
+title: "Self Hosted"
+date: 2021-11-14T16:39:46+07:00
+draft: true
+---
+
+## 社交
+
+- [discourse](https://github.com/discourse/discourse)
+- [lemmy](https://github.com/LemmyNet/lemmy)
+- [mastodon](https://github.com/mastodon/mastodon)
+- [mattermost](https://github.com/mattermost/mattermost-server)
+- [focalboard](https://github.com/mattermost/focalboard)
+- [Maskbook](https://github.com/DimensionDev/Maskbook)
+- [OkunaOrg](https://github.com/OkunaOrg)
+- [diaspora](https://github.com/diaspora/diaspora)
+- [movim](https://github.com/movim/movim)
+- [Peergos](https://github.com/Peergos/Peergos)
+- [friendica](https://github.com/friendica/friendica)
+- [hubzilla](https://framagit.org/hubzilla/core)
+- [misskey](https://github.com/misskey-dev/misskey)
+- [humhub](https://github.com/humhub/humhub)
+- [forem](https://github.com/forem/forem)
+- [steem](https://github.com/steemit/steem)
+- [subsocial](https://github.com/dappforce/subsocial-node)

+ 18 - 3
content/specs/alarm_server.md

@@ -6,9 +6,11 @@ draft: false
 
 # 设计
 
-alarm server 主要作为独立的服务进程支持其他服务进程的报警功能。其中有三大模块
+## 功能模块
 
-1. 报警功能. 支持 Email, SMS 等等报警通道。
+Alarm Server 主要作为独立的服务进程支持其他服务进程的报警功能。其中有三大模块
+
+1. 报警功能模块. 支持 Email, SMS 等等报警通道。
 2. WebUI. 用于远程参数配置,报警通道参数及开关,AppId, 黑白名单等设置。
 3. HTTP API. 用于客户端调用
 
@@ -17,4 +19,17 @@ alarm server 主要作为独立的服务进程支持其他服务进程的报警
 1. 运行日志
 2. 报警记录
 3. Docker 部署
-4. 支持连接 Etcd 等服务发现
+4. 支持连接 Etcd 等服务发现
+
+## 支持逻辑
+
+- 独立的 Alarm Server 应支持多个应用的报警接入。每个应用使用自己的 AppId, 或白名单,或用户名密码
+- Alarm Server 中,每个应用可设置自己的报警参数,比如某个应用仅支持 Email 报警,另一个同时支持 Email, SMS 报警,当然,这种设置需要 Alarm Server 本身支持这种配置。
+
+简单设计:
+
+Alarm Server 中支持 SMS 的话,SMS 参数应有默认设置,而客户端也可通过 API 来设置 SMS 平台,SecretKey 等参数。
+
+## WebUI
+
+WebUI 中主要设置报警模块参数,客户端 AppId 参数等管理。