0%

在上篇文章里,大概说了下我的需求以及相关软硬件的选型,本篇会记录一些OpenWrt下常用的软件,以及相互搭配下要如何配置。

零、OpenClash VS PassWall 怎么选?

首先,在我目前的硬件以及网络带宽中,两者其实差别并不大,无非是在配置上略有不同罢了。

比如PassWall使用配置简单,在低配路由上也能很好的发挥出性能;OpenClash虽然占用比较多的资源但也拥有更多的功能:比如高级策略分流等等。

反正我也不怕折腾,后续就选用了OpenClash。

一、SmartDNS有无必要?

你可能会问既然AdGuard Home也有DNS解析功能,那和SmartDNS不是冲突了么?为什么还要多此一举呢?答案并不是。

这里有个很关键的问题:AdGuard Home的DNS解析是无法区分域名该使用哪个DNS服务器解析的,而一般我们会配置多个DNS服务器,以返回最快的结果为准。

Untitled

这里问题就来了,以国内运营商的尿性,你也不知道啥时候会被DNS投毒不是,所以我们这里要用SmartDNS来对域名做个分流。

二、OpenClash如何搭配AdGuard Home以及SmartDNS?

OK,我们先看下规划图:

Untitled

  1. 首先我们要在SmartDNS配置好DNS服务器并进行分组:

    Untitled

  2. 自定义设置里分别为不同组绑定端口:

1
2
bind :6666 -group cn
bind :7777 -group us

Untitled

  1. 然后在AdGuard Home的DNS设置分别设置上游DNS服务器以及Bootstrap DNS服务器:

Untitled

  1. OpenClash DNS设置配置如下:

Untitled

至此,已经完成了科学上网的全部步骤,可以尽情享受网上冲浪的乐趣了。

早就有改造网络环境的计划,奈何之前都是和朋友合租,并不方便做这些。最近搬了新房子,终于得以实施这次改造。

零、需求

OK,首先说一下这次网络改造的需求:

  1. 科学上网:每个设备都要安装软件实在是太麻烦了!更何况一些硬件比如Oculus Quest、Switch必须要求“网络通畅”,全局无疑是最好的选择;
  2. 广告过滤/隐私保护:路由器层面的方案一般是DNS过滤,有优有劣,聊胜于无;
  3. Docker:主要是部署一些自己写的小玩意儿,比如一些网站的定时签到脚本等等;
  4. NAS:鉴于现在的网盘动不动就限速或者直接屏蔽文件(这是最恶心的,起码让下载回来啊),那么本地存储是必不可少的,另外就是最近经历过几次SSD掉盘,所以组个RAID也必不可少;
  5. 异地组网:由于没有公网IP,我这里选择的是腾讯云+frp+ZeroTier/Tailscale的组合。

一、硬件

欲先利其事必先利其器,硬件的选择是改造的重点:

  1. 路由:AP这块选择的是小米的AX6000,性价比很高,另外这款路由器升级了2.5G网口,这对局域网内NAS的传输速度是很关键的;
  2. 软路由:这里我选择的是J4125/16GB/128GB组合,目前来说性能过剩,但性价比还不错;
  3. NAS:在群晖 DS920+和威联通 TS- 453Dmini之间纠结很久:群晖用户体验好、但威联通性价比高;综合考虑,最后还是选了威联通,暂时配了14TB * 2的硬盘组RAID1。

二、软件

  1. 虚拟系统:目前主流的大概是:ESXi、unRaid以及PVE,三者我都用了下,最后选择了PVE。
  2. 软路由:这块主流就是OpenWrt,我选择的是Lean定制版。
  3. iKuai:原本是在规划里面,后面发现对我而言并没有什么作用,并没有多拨、流控之类的需求,后面也就舍弃了。

最后,附上这次改造后的网络拓补图:

当然,这几篇改造计划并不会涉及到软件安装配置等基本操作,仅仅起到记录作用。

其实前两个月就想写写国内的新闻自由、言论自由(国内的公民记者是一个接一个的消失,至今了无音讯),但毕竟肉身在内,有些道理可以懂,但是不能说,不然说不定哪天也就突然消失了。但最近的审查实在是…一言难尽。

最近发生了两件事,第一件是在朋友圈发了一张图片 — 一张CCTV官媒视频的截图,结果微信被秒封。要知道,在看到任何消息之后,我都会去核实消息的正确性,免得被某些“境外势力”带了节奏,没想到的是亲自从官媒截的图也难逃被封号这个命运;第二件事是最近在学习视频制作,所以就做了一期视频 — 大致是“如何利用一个手机号找到你”的科普,主要目的是让大家了解保护隐私的重要性以及如何保护隐私,可惜的是上传到B站却被告知视频内容风向不正确,不符合主流价值观,申诉自然也是无果。

什么是风向正确呢?做相关内容之前有看过创作协议,可以肯定的是这期内容不在任何言明的违规内容里,当然如果硬说要有的话,那可能是在“最终解释权”中。国内互联网最大的问题就是审核规则不透明,你永远不知道发表的内容合不合规以及为什么不合规,这也是中文互联网为何质量都不高的原因。“批评”的内容先不说,单说用心创作的可能“不符合”社会主义核心价值观的内容就发表不出来,那哪来的质量呢?最后不就只能跟跟风、抄一抄、做做营销号才能维持的了生活这样子。

这边文章其实是长篇大论(5000字+),但由于某些原因,不得不删除大概90%的内容才敢发出来,自然看起来文不对题了。

没办法。

本来这篇是准备写内网漫游来着,因为今天花了半天时间从某网站子域名提权到了 root 权限,想进一步深入的时候突然有了做实时翻译软件(语言识别、声音转文字、机器翻译、声纹识别)的想法(开始的渗透过程还是蛮有意思的,到内网之后,各种数据都能访问到反而提不起什么兴趣了),随后就把漏洞反馈给了网站的工作人员(整个渗透过程没有读取改动任何数据,Kali 也已回滚),回到正题,我们使用 OpenNMT-py 来训练翻译模型。

环境安装

1
2
3
# https://pytorch.org/get-started/locally/
conda install pytorch torchvision cudatoolkit=10.1 -c pytorch
# https://github.com/OpenNMT/OpenNMT-py

数据准备

官方提供的示例数据为英语 - 德语,所以我们要构建自己的训练数据,准备先训练翻译,如果效果好的话再训练语音转文字。

从网上找到了相关的中英文的数据。下载地址如下:https://drive.google.com/uc?id=1EX8eE5YWBxCaohBO8Fh4e2j3b9C2bTVQ ,但数据格式要转换一下,可以参考这个脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import json

lines = []
en_lines = []
cn_lines = []
with open('translation2019zh_train.json' , 'r', encoding='UTF-8') as r:
lines = r.readlines()

for line in lines[0: 10000]:
jf = json.loads(line)
en_lines.append(jf['english'] + '\n')
cn_lines.append(jf['chinese'] + '\n')

with open('src-train.txt' , 'w', encoding='UTF-8') as w:
w.writelines(en_lines)
with open('tgt-train.txt' , 'w', encoding='UTF-8') as w:
w.writelines(cn_lines)

训练模型

1
2
# 预处理
onmt_preprocess -train_src data/src-train.txt -train_tgt data/tgt-train.txt -valid_src data/src-val.txt -valid_tgt data/tgt-val.txt -save_data data/demo
1
2
3
# 训练
onmt_train -data data/demo -save_model demo-model -gpu_ranks 0
# 默认配置实测使用 2080Ti 训练 1W 条数据都要一个小时左右,9900K估计还要*10倍才行。。

翻译验证

1
onmt_translate -model demo-model_step_100000.pt -src data/src-test.txt -output data/pred.txt -replace_unk -verbose

然而翻译这一步的结果并不理想,训练数据太少而且质量不是很高(质量最高的我想应该是电影的双语字幕),最主要的是训练时间长啊..还是使用Google Speech-to-Text吧。

最近闹得沸沸扬汤的事件无疑是孙杨被禁赛8年和外国人永居条例了。

首先说一下孙杨被禁赛,怎么说呢?微博下清一色的声讨:支持孙杨、帝国主义亡我之心不死等等。但是呢,他们从来不会透过表象看本质,只会跟风带节奏声讨罢了。

不支持孙杨=不爱国这种脑残言论就不说了,说一下双方争议最大的,也就是检查人员的资质问题:孙杨团队认为部分人员证件有问题而拒绝检查。

首先要说的是IDTM(FINA授权的检测机构,1995年开始合作,检测逾2W人次)已经提供了授权文件以及检测人员的资格和证件,加上孙杨也接受过IDTM多达60次的检测,为什么这次要提出异议并且这么坚决的拒绝检测呢?

打个比方,这就相当于几个警察日常拿了搜查证以及主要人员的证件来搜查,你因为其他随行人员没有提供证件而拒绝一样。警察是一个整体,搜查证+主要人员的证件足以证明他们的身份。

还有让我不理解的是,为什么在同意采集样本之后,又要把样本砸坏呢?如果认定采集不合规就及时向FINA反馈就好了,不合规在先作废检查结果也不是没有先例。

对了,还有一种言论是别的国家的运动员使用兴奋剂也才被禁赛4年,凭什么孙杨就要被禁赛8年?首先,抗检受到的处罚力度我认为必然要强于检测出兴奋剂的,不然服用了兴奋剂的运动员不都抗检好了?再者说,8年是因为14年孙杨因误食被禁赛所以根据条例加倍(我查了一下在14年之前孙杨已经有了不小的名气,发生误食这种行为实在是不应该,显得团队很不专业)。

如果孙杨受到了不公平的对待,比如抽检次数明显比其他国家高,当然可以声讨。身为中国人,我们当然希望国家可以越来越好,取得更高的国际地位,但暴力抗检被禁赛8年这件事还是希望大家可以理性看待,仔细看案件细节得出结论再发表也不迟,不要被某些人带了节奏。

嗯,公开发布检测人员的证件信息(直到现在还没删除)这件事没得洗,带节奏攻击检测人员真的很没品(即使“可能是”非主观)。

说外国人永居条例之前,我先说说关于我、我小时候的故事。

我出生在严抓计划生育的年代,父母为了生下我可谓是经历了千辛万苦:辗转了几个省份、家里的房子被拆了两次、外婆外公被抓去拘留,哦对了,那时候还有“十户连坐”的规定(抓邻居去连坐你能信?)。

这次的意见稿让我不解的是,条例的内容漏洞为何这么多?为何条件放的这么宽(表面看是没问题,但是里面可以说的道道太多了..)?引入精英能理解,毕竟大多数国家都这么做(提供技术移民+投资移民的渠道),但是这个条款确定能吸引的来人才?20多年前计划生育,如今却要出台这种政策来补充劳动力;一边研究生扩招缓解就业压力,一边出台这个条例来让“洋大人”享受生活,真是迷幻。

至于“大力鼓励中国女大学生和留学生联姻”,我四处求证了一下,并没有在官方渠道找到,姑且可以认定是造谣,想着也不能蠢到这个地步,不过类似的事件也爆出来了不少,山大了解一下?

这次意见稿大概率会修改一些无关紧要的内容然后发布,毕竟这种反对无效的事也不是没有先例对吧?这么看先移民小国家再回来拿个永居享受超高福利也是个不错的选择。

万万没想到,疫情如此严重,只是反应迟了一点,发现口罩已经买不到了…只好写段代码,自动给图片戴上口罩,聊以慰藉。

我们先来看下原始图片和效果图片(图片是网上找来的,不追星,如有冒犯请见谅。):

技术方面主要用到人脸识别,首先安装依赖:

1
2
3
pip install face_recognition
# face_recognition是一个开源的人脸识别框架,可以识别人脸的128个关键点
# Windows下推荐使用anaconda安装,不然安装dlib依赖可能会遇到各种莫名其妙的问题

OK,上代码:

1
2
3
4
5
6
7
8
9
10
11
12
from PIL import Image, ImageDraw
import face_recognition
import math
image = face_recognition.load_image_file("cai.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)
pil_image = Image.fromarray(image)

for face_landmarks in face_landmarks_list:
d = ImageDraw.Draw(pil_image)
# 画一下人脸识别效果
for facial_feature in face_landmarks.keys():
d.line(face_landmarks[facial_feature], width=5)

来看一下人脸识别的效果:

嗯,还是很准确的,接下来就给他戴上口罩:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    # 首先确定口罩大小,下面四行注释是我找到的四个关键点(上图可见)
# d.text(face_landmarks['chin'][3], 'l')
# d.text(face_landmarks['chin'][13], 'r')
# d.text(face_landmarks['chin'][8], 'b')
# d.text(face_landmarks['nose_bridge'][2], 'u')
mask_image = Image.open('mask.png')
mask_length = face_landmarks['chin'][13][0]-face_landmarks['chin'][3][0]
mask_height = face_landmarks['chin'][8][1]-face_landmarks['nose_bridge'][2][1]
mask_image = mask_image.resize((mask_length, mask_height))
# 口罩的角度也要随着脸型调整一下
rotation = math.atan2(face_landmarks['nose_bridge'][3][0] - face_landmarks['nose_bridge'][0][0], face_landmarks['nose_bridge'][3][1] - face_landmarks['nose_bridge'][0][1])*100
mask_image = mask_image.rotate(rotation)
# 因为素材是N95口罩,所以要相应的处理下y轴的坐标
pil_image.paste(mask_image, (face_landmarks['chin'][3][0], face_landmarks['chin'][3][1] - int(mask_height/2)), mask_image)

pil_image.show()

当然,也可以给一群人都戴上口罩,上面只是很简单的一个脚本,优化空间还有很多,比如口罩的旋转角度算法、低分辨率下的人脸识别等等。

最后呼吁大家提高对本次疫情的重视程度,种种迹象表明这次比非典要严重很多很多。

希望大家平安无事!早日战胜疫情!加油!

过去一段时间里,林林总总搞了很多“不务正业”的东西,借着最近这段闲下来的时间来总结一下。

一、小程序

  1. 魔法投资公式(练手项目)
    根据Joel Greenblatt的那本《The Little Book That Beats The Market》书中提到的魔法公式写成的,但是书中提到的价值投资并不适用于国内,没人愿意购买计算出的投资项目就关闭了。

  2. 最右神评论(练手项目)

    那段时间内我很喜欢看神回复,所以这个小程序就诞生了,数据主要采集于知乎、网易、豆瓣。
  3. 许多包(投入精力最大,耗时两个月(周末+每天下班开发))

    为什么说投入精力最大呢?因为整个技术栈下来涉及到语音识别、图片识别、高并发、支付资金监管等等方面;而且除了截图上面的几种玩法,还有已经计划中的包括拼图画图、表情、条件、主题、互动等等类型(比QQ还要早一年..),可惜因为政策原因,导致第一版没有上线,后面也就不了了之了。
  4. 恋爱小记(给女朋友做的)

    程序猿的浪漫,你懂的。

二、APP

  1. 电音CLUB(电音资讯、活动组队)
    电子音乐的魅力是无穷的!如果能时时刻刻了解最新电音资讯、电音活动就更好了!
    (PS:其实是因为第一次去电音节找不到队友。。一个人太尴尬,才想着做一个集资讯和组队于一体的APP。直到现在,我也觉得这个产品很有潜力。)

  2. 念念(社交APP,LBS交友,念念不忘,必有回响)
    这款产品主要做的是虚拟恋人方面的,但一直上不了架,直到后来比心出现,就没有再开发了。

三、网站

  1. 聚合阅读(RSS订阅+爬虫)
    市面上已经有了很多的RSS订阅工具为什么还要做这个呢?因为他们都没有推送到Kindle的功能,而且很丑,为了让自己更舒服的阅读就开启了这个项目,不得不说Google的Material Design真的是漂亮。

四、其他

  1. Sticky Notes(Chrome插件,网页版便签)

    灵感来源于一次产品会议,如果能在页面的各个位置添加便签该有多好?然后就有了这个插件。。
  2. 鼠标点击特效 (๑•́ ∀ •̀๑)(Chrome插件,好玩的鼠标点击特效)

    目前为止,已经有了5000多的用户数,感觉大家对这种可爱的东西还是蛮有兴趣的。
  3. 分享至微信(Chrome插件,将浏览中的网页分享到微信)
    生成供微信扫描的二维码,没有技术含量。

不过说起来过去一年已经收到不下五封邮件要来收购Chrome扩展了。
  1. “CTOS”(安全工具)

    对没错就是看门狗中的CTOS,市面上的安全扫描工具很多,但大都只会告诉你这个漏洞不会告诉你怎么利用。所以这个想法就诞生了,做一款集成定制很多PoC、Exp、一键GetShell于一体的工具。

五、总结

可以看到大多数项目因为政策原因不得已夭折了。
或许接下来的时间并不会在国内做产品了(海外产品已经有了想法),因为政策限制实在太大(如果明明白白写清楚也好,但很多规则都是不透明的,明明满足条件还是各种理由不给你上架)。
小程序不能有输入框,个人去哪里办文网文(公司也不是那么容易下的)?APP不能上架,需要软著、ICP许可证,无疑对个人开发者来说打击是十分巨大的。
那做网站总行了吧?不好意思,备案一条龙了解一下?

几天以前,终于从在职了四年多的公司离职了。

其实之前就在考虑要不要走,随着技术架构逐渐稳定,最近一年的工作趋于平淡,大多数时间可能也就是优化一下架构、写写业务逻辑、改改BUG之类的。

然后这半年时间发生了很多无关技术的事情,其中不乏优秀同事的离开、空降另一团队内斗等等,实在厌烦这些勾心斗角,走掉或许是一个不错的选择。

休息了几天,闲下来索性总结一下在前东家的工作职责:

  1. 16-17年,侧重于业务开发,为已有产品排查、检测并修复安全隐患,信息安全不容小窥;
  1. 17-18年,进入架构组,为新产品设计实施了部分架构,其中包含身份认证、邮件短信、页面引擎、分布式配置、日志管理等;
  1. 19年,引入新技术、新模式,其中包含Docker的引入、VSTO开发的Office套件、Flask实现的数据库多租户解决方案等。

最后,附上在前东家四年间所获得的荣誉证书,免得被误认为是态度不端正、能力不行干不下去才走的。。

嗯,现在到过年还有两个月的时间,这段时间准备回去陪陪父母顺便考个驾照,静下心来思考下以后的路职业规划(之前是在往全栈工程师发展(后面可能会单独写一篇文章回顾自己独立做的产品),后续可能会往互联网系统架构方面发展),学学新东西,免得和主流技术脱节。