人生第四阶段
· 阅读需 3 分钟
人生阶段
鲁道夫·施泰纳的人智学理论,定义人的发展每七年一个阶段。
鲁道夫·施泰纳 - Rudolf Steiner,1861 年 2 月 27 日-1925 年 3 月 30 日,奥地利的哲学家、改革家、建筑师和教育家
鲁道夫·施泰纳的人智学理论,定义人的发展每七年一个阶段。
鲁道夫·施泰纳 - Rudolf Steiner,1861 年 2 月 27 日-1925 年 3 月 30 日,奥地利的哲学家、改革家、建筑师和教育家
比较 Metabase、Redash、Superset 这几款开源的 BI 产品。
Name | License | Stars | Languages | Deps | Github |
---|---|---|---|---|---|
Metabase | AGPL | Clojure | H2/PostgreSQL | metabase/metabase | |
Redash | BSD | JS | Redis+DB | getredash/redash | |
Superset | Apache | Python | Cache+DB | apache/superset |
CYW 没有了 我(W) 便是 你(CY)
-- wener
K3S is five times eaiser than K8S 😊
# 生成 libdemo.so libdemo.h
go build -buildmode=c-shared -o libdemo.so ./demo.go
# 编译 main
go build main.go
./main
# macos - 查看内容
nm libdemo.so | grep hello -i
# linux
nm libdemo.so
# windows
dumpbin /EXPORTS libdemo.dll
# windows 交叉编译 - 需要安装 mingw
brew install mingw-w64
# 32 位 交叉编译
GOOS=windows GOARCH=386 CGO_ENABLED=1 CC=i686-w64-mingw32-gcc go build -buildmode=c-shared -o libdemo.dll ./demo.go
GOOS=windows GOARCH=386 CGO_ENABLED=1 CC=i686-w64-mingw32-gcc go build main.go
# macos wine 不支持 32 位 - mingw 版本低不支持 64 位
# mac 会出现异常 cc1: sorry, unimplemented: 64-bit mode not compiled in
# 通过 docker 编译
docker run --rm -v $HOME/go:/root/go -v $PWD:/host -w /host wener/go:win sh
GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -buildmode=c-shared -o libdemo.dll ./demo.go
GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build main.go
# 回到 mac 使用 wine 执行
# wine 无法在 macos 上编译安装 - 系统版本问题 - 需要使用 cask 安装
brew cask install wine-stable
wine64 main.exe
# wine 4.0 初始化 dll 失败
# 0010:fixme:winsock:set_dont_fragment IP_DONTFRAGMENT for IPv4 not supported in this platform
# 0009:err:module:attach_dlls "libdemo.dll" failed to initialize, aborting
# 0009:err:module:attach_dlls Initializing dlls for L"Z:\\Users\\wener\\demo\\main.exe" failed, status c0000005
demo.go
package main
import "C"
//export Version
func Version() int32 {
return 123
}
//export Hello
func Hello(name *C.char) *C.char {
return C.CString("Hello "+C.GoString(name)+"!")
}
func main() {}
main.go
package main
import "fmt"
/*
#cgo CFLAGS: -I.
#cgo LDFLAGS: -L. -ldemo
#include "libdemo.h"
*/
import "C"
func main() {
fmt.Printf("Int %v String %v\n",C.Version(), C.GoString(C.Hello(C.CString("Wener"))))
}
动态策略概念相对宽泛,在进入正式的内容之前容我先明确题目中动态策略的范畴。
这里的动态策略指,现在以 A 方式来做某件事,在过程中可能被切换为 B 方案,但对上层来说是无感的。策略可以映射为策略模式(Strategy Pattern),例如
在想标题的时候,看到主演里有 囧(森瑟夫),突然觉得好贴切感受,在观影时大部分是这个表情。
语言就是程序员的酒精/Languages are alcohol to programmer。🍺 ⏤ wener