CI_Knight

且行善举,莫问前程。

0%

我用的智能家居

我有用过小米的手机,总体体验来说一般,但是智能家居,小米还是挺能打的。上手简单,软硬件齐备,价格嘛,真的很便宜。这东西真的能挣钱?相比一些高端品牌(不考虑国外品牌)那么便宜能赚几个钱?

我们家刚装修完,用了全套的小米智能家居。价格吧,比起非智能确实贵了些,比如插座好一些的十块一个,小米卖到六十,加一些传感器要卖这么多?那可能没有,贵应该是贵在整个生态上,毕竟开发设计都是要钱的。那比起高端一些的又便宜很多,我猜硬件肯定不会高出那么多成本的。我在Aqara(绿米)的线下体验店看过,有一百多的开关,有三百多的开关,差在哪?在设计上,材质上,贵的摸上去看上去都高端,你买个房子几百万几千万,那不得好好设计一下。只有我们这种不在乎设计的会选择更加亲民的小米,那丑是真的丑。当时挑选的时候,想挑一些生态比较好的,东西多,玩法多,肯定是小米必选。好看一些的,如影,一个中控面板卖你2000+甚至更高,太贵,超出了预算。只能考虑红米的智能音响了,三百左右,还有小爱智能屏幕,难用是真的难用,还有状态同步慢等等问题,MIUI Home还在发展中,体验上还是不如中控好,毕竟一分钱一分货。

其他的平台

除了米家还有苹果的HomeKit,也是很好的选择,也包括小米的一些智能设备可以接入HomeKit,选择的时候可以注意。小米生态链的Aqara,Yeelight也都做了自己的智能家居平台,还有不容小觑的美的美居,现在美的的设备都带着智能,玩法虽然都是借鉴的,智能家居还是需要用心搞搞的。还有就是涂鸦,我老家用的涂鸦,感觉线下用的会多,他们貌似自己不做产品,制作生态,没有统一定价,线下就更好赚钱了。

米家到底怎么赚钱的?

说了那么多,米家到底怎么赚的钱呢,我感觉这一切都要从网关说起

网关

网关到底是什么?可以把他理解成一个路由器,让智能设备连接的路由器。一般来说智能家居都是用的Zigbee和蓝牙,蓝牙Mesh(BLE 5.0),这些协议我就不展开讲了。如果用WiFi的话,可以直接连接路由器,如果其他的就需要专门的网关了。

网关也有种类

小米网关种类非常多,光买网关就可以赚你的钱了。网关可以分为以下三个种类。

  • 中枢网关
  • 从网关
  • 盲网关

从协议分也有三种

  • 多模网关
  • 蓝牙网关
  • 集成网关(也就是智能设备自带的)

可以看下我们家里的网关

盲网关是需要连接WiFi的,所有场景和自动化执行必须从互联网走一圈,而且不受中枢网关的控制,只要一断网家里的智能基本上就趴窝了。像吸顶灯,小爱音响或者一些摄像头都会带一个网关,基本上都是盲网关,无法变成从网关。从网关在没有中枢网关的时候也是盲网关,小米多模网关就可以变成从网关,接受中枢网关的调度,多模是支持通信协议(包括蓝牙、蓝牙Mesh、Zigbee),也是需要从互联网走一圈的。如果想要断网依旧可以设备互联,这时候就要有一个中枢网关了,当中枢网关搭建起来,可以将云端执行的场景转换到本地执行,并且多模网关会变成从网关。为了有更好的体验,最好把其他盲网关关掉。

这些网关就很赚钱了,我最初买了多模网关,不能本地执行,有时候会很慢(多模网关是WiFi连接),就买了中枢网关,买完后多模网关就上新款了,变成了有线连接。

设备联动

当你买了网关,就可以接入更多的设备,设备之间也可以联动,为了有更多的玩法你就会买更多的智能设备。场景米家会给你推荐一些,但是更多的玩法也是根据自家环境来探索的。智能家居体验上还是挺好的,米家也大大减少了入门门槛,只需要简单学习一下就可以。

一些很贵的设备

当然家里的电器也可以换成支持米家的,总体体验会好很多,油烟机洗碗机、冰箱洗衣机,小米也开始渗透到生活家电的各个方面,价格优惠,产品质量也说得过去。

除了电器,智能窗帘的价格也不便宜,电机加轨道基本上也快要上千了。还有中央空调控制器,绿米的那个大概在2500元左右(太贵了到现在还没有装)。

钱是被赚走了,体验变好了,双赢。

现在有很多笔记和知识管理软件,比如Notion、语雀、幕布,还有老牌服务Confluence等。这些各有优势,但是基本上都不支持私有云部署,支持私有云的也是价格昂贵。我个人还是倾向于使用私有云,笔记这种东西,迁移数据还是挺麻烦的。

我自己就用的开源Wiki软件TiddlyWiki5,部署在家里的NAS里面。

TiddlyWiki5

使用简单,功能丰富,支持插件。

安装

直接使用npm安装,使用起来就几个简单命令。

初始化

tiddlywiki mywiki –init server

运行

tiddlywiki mywiki –liste

插件

官方已经自带了很多插件了,具体可以看https://github.com/Jermolene/TiddlyWiki5/tree/master/plugins/tiddlywiki。修改配置文件tiddlywiki.info,将需要的插件写入配置文件,运行服务就可以了。

使用

使用起来非常简单,目录结构基本上都是通过tag实现,当然也可以看官方给的样例来学习如何使用。

官方样例看:https://tiddlywiki.com/

由于我们线上环境依然使用的Python 3.7,换了M1的电脑后,Python 3.7无法使用。大多软件基本上没有遇到兼容问题,唯独遇到Python 3.7有问题。大概就是3.7版本还没有兼容M1,在升级到3.8后也遇到了其他的问题。为了开发稳定还是要使用3.7版本开发。当然办法有很多,在我现在看来,成本最低就是解决3.7版本的运行问题。查阅尝试了很多方法,最靠谱的就是使用brew安装x86的Python 3.7,然后再做软连接到pyenv,如果不用pyenv,也可以做软连接到自己的喜欢的地方。

brew在M1和x86有不同的家目录,详细可以看brew介绍,接下来看如何操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Install x86 brew
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
alias ibrew=/usr/local/bin/brew

# Install Python 3.7
ibrew install [email protected]

# Add `python` executable (symlink to `python3`)
ln -s python3 "$(ibrew --prefix [email protected])"/bin/python

# Symlink x86 Python 3.7 into pyenv
ln -s "$(ibrew --prefix [email protected])" .pyenv/versions/3.7.12

# Check
pyenv local 3.7.12
python -V
# Python 3.7.12
python -c 'import _ctypes'. # works!

想要尝试其他方法,可以看我引用的链接。

参考

博客总是有一些奇怪的排版,尤其是中引文混用的时候,就像下面这样。

一般文字排版都是CSS的text-align属性控制的,当调整text-align属性时,文字会相应的使用不同的对齐方式。但上面这种是因为英文单词截断方式导致的,纯汉字或者纯英文一行不会发生这样的问题,而且换行位置正好是有连接符的,这就让我猜想应该是英文字符截断有关。直接通过chrome调试,更改连接符位置,果然会重新换到连接符的位置换行。那这时候就应该调整word-break了。

但纯的调整text-align不能达到美化的效果,会导致每行行数不一。所以调整word-break到break-all就可以了,具体的也可以根据不同浏览器适配来调整。

因为网站大多是自适应排版,除非固定post-body的宽度,才能做到比较好看的排版。也或者hexo有自动截断英文单词并且添加连接符的插件,这种插件当然我没有找到,如果有人知道可以告诉我。现在的排版已经好很多了,不会再出现非常难看的超宽字距了,况且也不能和专业排版软件比。

参考

还有一天就国庆了,现在满脑子都在想给祖国庆生。不过这样重大的节日,翻墙总是会出些问题,为了应对这样的问题,应该提前多建几个代理服务器,那我就选了一台 vultr 服务器做备用机,之前都是 vmess 协议,这次打算尝试下 trojan 的安全性。如果你在搬瓦工、digital ocean、vultr等这种云服务商搭建的 vpn,在重大节日时,大概率都会被封端口或者是 IP,而且 vmess 现在应该是可以被准确识别了,我的 vmess 代理每次都可以精准被封端口。

vultr 的美国线路要比 digital ocean 更好,而且有日本可选,新加坡基本抢不到,如果选美国最好使用美西服务器,如果电脑系统是 MacOS,可以安装 BestTrace 软件看下线路,vultr 提供了测试的 IP 地址,在他们官网可以找到。

如果是 vultr 的新用户可以网上搜下优惠码,这样你可以获得 100 美金的试用金,一个月内有效。vultr 可以使用支付宝和加密货币支付,这点还是挺厉害的。

搭建 trojan 服务器

我选的系统是 Debian 11,接下来可以直接跟着步骤操作。vultr 需要在后台设置下安全组,放开 80 和 443 就可以了。使用 trojan 需要一个域名,并且使用ssl加密。如果想了解更多,可以看p4gefau1t trojan的文档。

关闭防火墙

1
2
systemctl disable ufw.service
systemctl stop ufw.service

安装 Nginx

1
2
3
apt install tmux unzip nginx
systemctl enable nginx
systemctl start nginx

下载 trojan

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
mkdir trojan
cd trojan
wget https://github.com/p4gefau1t/trojan-go/releases/download/v0.10.6/trojan-go-linux-amd64.zip
unzip -o trojan-go-linux-amd64.zip
rm trojan-go-linux-amd64.zip
cat > config.json <<EOF
{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 443,
"remote_addr": "127.0.0.1",
"remote_port": 80,
"password": ["your password"],
"ssl": {
"cert": "/etc/letsencrypt/live/example.com/fullchain.pem",
"key": "/etc/letsencrypt/live/example.com/privkey.pem",
"sni": "example.com"
}
}
EOF

配置文件要把域名和密码修改成自己的。

申请证书

我们使用 certbot 申请证书,也可以使用自己购买的证书。(或者使用acme.sh)

1
2
3
4
5
apt install snapd
snap install core
snap refresh core
snap install --classic certbot
certbot certonly --nginx

运行 trojan

1
2
tmux new -s trojan-server
./trojan-go -config config.json

证书续订

1
certbot renew --dry-run

客户端

我推荐使用ClashX,是一个小猫咪的图标,有 MacOS、Windows、Android 版本,配置可以根据https://github.com/Hackl0us/SS-Rule-Snippet/blob/master/LAZY_RULES/clash.yaml自行修改,配置可以托管在服务器上,多端共用一套配置即可。iOS可以使用shadowrocket,兼容Clash的配置,可以直接添加。

参考

问题和教程都有时效性,我一般写的都很少,很多依赖于版本或者系统,当遇到问题更建议去 Stack Overflow 或者 Github issue 中搜索,也或者直接使用 Google 搜索,肯定很多人乐于写这些。不过我今天还是水了一篇文章。

版本和软件环境

1
2
3
4
System: MacOS 10.15
Python: 3.7.6
gunicorn: 19.9.0
pycoin: 0.90.20190728

问题

我在家里电脑启动一个 gunicorn 服务时,出现 worker 无法的情况,但是并没有任何保存,只有 worker 重启日志,因为没有报错,排查起来就比较麻烦了。我使用的 pipenv 启动的,软件依赖问题可能性很小。当我尝试使用 ipython 运行的时候,则会报错 Abort trap

解决

这时候会发现服务并没有抛错,而我还没办法定位哪里出现的异常,并且吞掉了错误信息。如果使用 pdb 这种工具,定位错误是很费力的。想要快速定位 Abort 位置,可以使用 PYTHONVERBOSE 环境变量。

将 PYTHONVERBOSE 设置为 3 再启动服务,会打印加载模块时的日志,闪退后最后输入的日志,就是我们要定位的地方。通过这种方式我知道是 pycoin 加载 openssl 动态链接库的时候报错了,因为使用了 pycoin 的 ecdsa 模块,并且还是用了 openssl 加速,找不到动态链接库才闪退的。

我们可以将 /usr/local/Cellar/openssl 下的动态链接库拷贝到 /usr/local/lib/ 下,并且再做软连接。

1
2
3
4
5
6
brew install openssl
cd /usr/local/Cellar/[email protected]/1.1.1i/lib
sudo cp libssl.1.1.dylib libcrypto.1.1.dylib /usr/local/lib/
cd /usr/local/lib
sudo ln -s libssl.1.1.dylib libssl.dylib
sudo ln -s libcrypto.1.1.dylib libcrypto.dylib

参考