brew link python3 出错
$ brew install python3
Warning: python3 3.6.3 is already installed, it's just not linked.
You can use `brew link python3` to link this version.
$ brew link python3
Linking /usr/local/Cellar/python3/3.6.3... Error: Permission denied @ dir_s_mkdir - /usr/local/Frameworks
发现 /usr/local/ 下没有路径 /usr/local/Frameworks,需要新建该路径,并修改权限。
解决:
$ sudo mkdir /usr/local/Frameworks
$ sudo chown $(whoami):admin /usr/local/Frameworks
成功:
$ brew link python3
Linking /usr/local/Cellar/python3/3.6.3... 1 symlinks created
Mac Cisco AnyConnect Client 卸载
获取所有包信息
pkgutil --pkgs | grep com.cisco
删除所有遗留包
sudo find / -name "*cisco*" | xargs rm -rf
sudo rm -rf /private/var/db/receipts/com.cisco.pkg.anyconnect.*
HTTP 传输内容的压缩
HTTP 压缩,在 HTTP 协议中,其实是内容编码的一种。
在 HTTP 协议中,可以对内容(也就是 body 部分)进行编码,可以采用 gzip 这样的编码,从而达到压缩的目的。也可以使用其他的编码把内容搅乱或加密,以此来防止未授权的第三方看到文档的内容。
所以 HTTP 压缩,其实就是 HTTP 内容编码的一种。
HTTP 压缩是指: Web 服务器和浏览器之间压缩传输的"文本内容"的方法。HTTP 采用通用的压缩算法,比如 gzip 来压缩
HTML、JavaScript、CSS 文件。能大大减少网络传输的数据量,提高了用户显示网页的速度。
首先,浏览器发送一个请求(request)给 Web 服务器,支持一个压缩格式如(gzip),服务端会将原来的源码压缩之后,通过
HTTP 响应(response)信息返回给 Web 浏览器,浏览器接收之后,显示出来。
HTTP 压缩的过程:
1.浏览器发送 HTTP Request 给 Web 服务器,Request 中有 Accept-Encoding:gzip、deflate。
2.Web 服务器接到 Request 后,生成原始的 Response,其中有原始的 Content-Type 和 Content-Length。
3.Web 服务器通过 gzip,来对 Response 进行编码,编码后 header 中有 Content-Type 和 Content-Length(压缩后的大小),并且增加了 Content-Encoding:gzip,然后把 Response 发送给浏览器。
4.浏览器接到 Response 后,根据 Content-Encoding:gzip 来对 Response 进行解码。获取到原始 Response 后,然后显示出网页。
Grafana 忘记密码 重置 admin 密码
先进入 grafana 的数据库
sqlite3 /var/lib/grafana/grafana.db
执行 update 操作
sqlite> update user set password = '59acf18b94d7eb0694c61e60ce44c110c7a683ac6a8f09580d626f90f4a242000746579358d77dd9e570e83fa24faa88a8a6', salt = 'F3FAxVm33R' where login = 'admin';
sqlite> .exit
再重新用 admin 密码登录就可以
账号 admin
密码 admin
InfluxDB 报错 connection refused service=subscriber
InfluxDB 的日志中有大量如下报错
Post http://localhost:9092/write?consistency=&db=_internal&precision=ns&rp=monitor: dial tcp 127.0.0.1:9092: getsockopt: connection refused service=subscriber
解决方案:
取消 kapacitor 订阅
[root@qtsdb01 /home/s/logs/influxdb]# /home/s/server/influxdb/bin/influx
Connected to http://localhost:8086 version 1.2.4
InfluxDB shell version: 1.2.4
> show subscriptions
name: _internal
retention_policy name mode destinations
---------------- ---- ---- ------------
monitor kapacitor-7fe56778-d84d-4d8e-9cf3-457e2dcd2a7c ANY [http://localhost:9092]
monitor kapacitor-29cd4eb0-a394-4e0f-bd25-91251fa69238 ANY [http://localhost:9092]
> drop subscription "kapacitor-7fe56778-d84d-4d8e-9cf3-457e2dcd2a7c" on "_internal"."monitor"
> drop subscription "kapacitor-29cd4eb0-a394-4e0f-bd25-91251fa69238" on "_internal"."monitor"
>
CentOS6.7 以 yum 形式升级内核并安装 Docker
目前内核版本。
[root@lost docker]# uname -r
2.6.32-573.el6.x86_64
导入 public key。
[root@lost yum.repos.d]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
Go 单例模式
Lazy Loading:
type singleton struct {
}
// private
var instance *singleton
// public
func GetInstance() *singleton {
if instance == nil {
// not thread safe
instance = &singleton{}
}
return instance
}
带锁:
type singleton struct {
}
var instance *singleton
var mu sync.Mutex
func GetInstance() *singleton {
mu.Lock()
defer mu.Unlock()
if instance == nil {
// unnecessary locking if instance already created
instance = &singleton{}
}
return instance
}
带检查锁:
// <-- Not yet perfect. since it's not fully atomic
if instance == nil {
mu.Lock()
defer mu.Unlock()
if instance == nil {
instance = &singleton{}
}
}
return instance
Go 语言小细节(一)
多个 defer 出现的时候,多个 defer 之间按照 LIFO(后进先出)的顺序执行
package main
import "fmt"
func main(){
defer func(){
fmt.Println("1")
}()
defer func(){
fmt.Println("2")
}()
defer func(){
fmt.Println("3")
}()
}
对应的输出是:
3
2
1