状态模式避免了一个程序中出现大量的switch case/if。实际上是将状态的转换拆分到不同的子类中实现。
在实现子类的时候,只需要考虑当前状态,传入的条件,下一个状态。比较节省脑容量。
这是一个go实现的状态模式的例子。
```go
/ statemode 这是一个状态模式的示例
状态根据当前的信息转换
normal -心跳过期-> preOffline -继续过期-> offline
-心跳恢复-> normal
/
package statemode
import (
"fmt"
"math"
"time"
"github.com/sirupsen/logrus"
)
type State interface {
// Change 状态根据传入的info进行改变,返回新的状态或者错误
Change(info map[string]string) (State, error)
}
type NormalState struct {
}
func (n *NormalState) Change(info map[string]string) (State, error) {
ttime, err := datautils.T [查看更多...]

来自 大脸猪 发送于 2021-11-23 14:57 - 0 条评论

使用fpm的方式部署
申请域名并配置好A记录
先申请一个域名,并且将A记录解析到需要部属的机器IP。
这里以pan.yinzihao.com:8200为例
使用docker-compose部署服务
首先在目录下创建这些文件,创建nextcloud文件夹
run.sh
nohup bash /home/loop.sh &
/entrypoint.sh php-fpm
loop.sh
apt update
apt install smbclient -y
apt install sudo procps -y
while :
do
echo will run cron
sudo -u www-data php -d memory_limit=512M -f /var/www/html/cron.php
sleep 600
done
注意:随着nextcloud的镜像不断更新,sources.list要同步更新。
如果不在意速度,注释掉docker-compose.yml中的:- ./sources.list:/etc/apt/sources.list
sources.list
```
deb http://mirrors.ustc.edu.cn/debian bullseye main
deb-src http://mirrors [查看更多...]

来自 大脸猪 发送于 2020-02-20 17:44 - 0 条评论

最近在用screen,后来发现,tmux更好用啊。这是一个笔记。
参考资料:
https://cloud.tencent.com/developer/article/1195836
安装
sudo apt-get install tmux
配置
配置快捷键
```
首先创建几个alias
vi ~/.zshrc
alias tls="tmux ls"
alias ta="tmux attach -t "
alias tk="tmux kill-session -t"
alias ts="tmux switch -t "
alias tn="tmux new -s"
```
编辑配置文件
touch ~/.tmux.conf
vi ~/.tmux.conf
内容:
本配置中,prefix被重设为ctrl+x
```
set -g status-bg colour14
新版配置,配置当前窗口的颜色
setw -g window-status-current-style fg=red,bg=white
set -g window-status-format '#I:#{=-10:window_name}'
set -g window-status-current-format '#I:#{=-10:window_name}'#br [查看更多...]

来自 大脸猪 发送于 2020-03-16 18:24 - 1 条评论

redis
docker run -d --name redis -p 6379:6379 docker.io/redis redis-server
mysql
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
kafka docker-compose.yaml 参考:https://segmentfault.com/a/1190000021746086
```
version: '3.7'
services:
zookeeper:
image: wurstmeister/zookeeper
volumes:
- ./data:/data
ports:
- 2182:2181
kafka9094:
image: wurstmeister/kafka
ports:
- 9092:9092
environment:
KAFKA_BROKER_ID: 0
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://127.0.0.1:9092
KAFKA_CREATE_TOPICS: "kafeidou:2:0" #kafka启动后初始化一个有2个partitio [查看更多...]

来自 大脸猫 发送于 2019-05-20 11:45 - 0 条评论

这篇文章将搜集一些平时在工作中用到的使用反射小实例。
反射反射真快乐。
遍历一个slice,并且将它转换为int类型
```
func Slice2Ints(s interface{}) ([]int, error) {
val := reflect.ValueOf(s)
if val.Kind() != reflect.Slice {
return nil, fmt.Errorf("s:%v is not slice type", s)
}
ret := make([]int, 0, 10)
for i := 0; i < val.Len(); i++ {
e := val.Index(i)
v := e.Interface()
intV, err := ToInt(v)
if err != nil {
return nil, err
}
ret = append(ret, intV)
}
return ret, nil
}
```
读取map,取一个随机的key
func getOneKey(m interface{}) (string, error) {
val := reflect.ValueOf(m)
if [查看更多...]

来自 大脸猪 发送于 2021-09-09 11:29 - 0 条评论

抓特定端口和网卡
sudo tcpdump -i eth1 -nn port 11002 or port 11001 -XX
抓特定HOST和端口 -X 打印包体
tcpdump -X host 192.9.200.59 and tcp port 8000
导出xxx.cap文件,可以用wireshark分析
tcpdump -X host 11.76.223.5 and tcp port 6651 -w /tmp/xxx.cap
[查看更多...]

来自 大脸猪 发送于 2020-05-07 11:28 - 0 条评论

整理自:
https://forums.unraid.net/topic/2100-rsync/
启动unraid rsync后台任务
mkdir -p /boot/custom/etc/
mkdir -p /boot/custom/etc/rc.d
设置rsync.conf文件,内容:
```
uid = root
gid = root
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
timeout = 600
[backups_synology]
path = /mnt/remotes/AIRDISK_Q3X_99B_Elements-B/backup/synology_back
comment = Backups_synology
read only = FALSE
```
将rsync.conf文件同时放到/boot/custom/etc,/etc下。
将配置持久化(unraid操作)
touch /boot/custom/etc/rc.d/S20-init.rsyncd
内容如下:
S20-init.rsyncd
```bash#br [查看更多...]

来自 大脸猪 发送于 2021-11-03 14:15 - 0 条评论

好厉害
v2rayx-windows
路由器配置padavan
在inbound 数组中配置中粘贴:
{
"port": 1099,
"protocol": "dokodemo-door",
"settings": {
"network": "tcp,udp",
"followRedirect": true
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
}
},
[查看更多...]

来自 大脸猫 发送于 2017-07-08 12:22 - 2 条评论