joe 4 年 前
コミット
85a04971b2

+ 4 - 0
README.md

@@ -7,6 +7,10 @@
 ## languages/rust
 ## languages/rust
 
 
 
 
+## languages/go
+
+- [go tricks](http://git.wanbits.io/joe/blog/src/master/content/languages/go/go-tricks.md)
+
 ## res
 ## res
 
 
 - [工具和玩具](http://git.wanbits.io/joe/blog/src/master/content/res/tools.md)
 - [工具和玩具](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 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,
 It's similar to Go and its design has also been influenced by Oberon, Rust, Swift,
 Kotlin, and Python.
 Kotlin, and Python.

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

@@ -9,5 +9,22 @@ tags: []
 
 
 ```shell
 ```shell
 mysql> DESCRIBE business.student;
 mysql> DESCRIBE business.student;
+mysql> DESC business.student;
 mysql> show create table 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, 黑白名单等设置。
 2. WebUI. 用于远程参数配置,报警通道参数及开关,AppId, 黑白名单等设置。
 3. HTTP API. 用于客户端调用
 3. HTTP API. 用于客户端调用
 
 
@@ -17,4 +19,17 @@ alarm server 主要作为独立的服务进程支持其他服务进程的报警
 1. 运行日志
 1. 运行日志
 2. 报警记录
 2. 报警记录
 3. Docker 部署
 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 参数等管理。