tinc后续

之前用tinc构建了虚拟专网,实现了在不同局域网内的机器通过tinc互相访问,但是遇到一个问题,我想从公司里访问到家里其他没有装tinc的机器,或者从家里其他没有装tinc的机器访问到公司里装了tinc的机器。经过一番简单的设置便可以达到想要的效果。 家里一台HTPC装了tinc,新增IP为192.168.88.3,内网IP为192.168.66.110,家里所有机器网关都指向软路由,假设IP为192.168.66.1,修改相应配置。 修改所有机器上的/etc/tinc/

使用tinc构建虚拟专网

之前写过一篇文章讲如何在家里无缝访问公司网络,用的是frp的方案,但正如使用ngork一样,frp也会莫名其妙地突然不工作,而且几乎没有什么错误信息可供调查。后来知道了有zerotier这个东西,相对来说还是比较稳定的,速度也凑合,免费额度可以在一个网络中添加最多100个设备,但是流量通过别人的服务器总归有点不爽,直到最近知道了tinc这个东西,可用于创建点对点的虚拟专网。 经过近一天的折腾,终于把公司两台iMac,家里一台Linux HTPC,以及Linode东京1一台V

Clang on Windows for Qt

几年前也曾经试图折腾过Clang on Windows,那时候的完成度还不高,只能配合MinGW使用,而且头文件搜索路径还是源代码中硬编码的。 现在完成度已经很高了,Chrome for Windows已经转而使用Clang编译。Clang官方支持2个target,分别配合MinGW和MSVC使用,只要在设置好PATH和target,clang就能自动使用对应的头文件,库文件,链接器等等。 偶然发现Qt 5.11.0已经带了win32-clang-msvc这个mkspec

在家里无缝访问公司网络

有时候在家里时想访问公司网络,干点活(真是个好员工),主要就是开开内网的网页,连连内网的IM(Cisco Jabber)。本来这个事情只要有一个VPN就可以搞定了,但是!但是我没有权限申请VPN,于是只好另辟蹊径了。 首先,找到一个用于搭建内网隧道的反向代理工具frp,通过它在家里开一个服务端,在公司开客户端,于是家里的机器上就有了一个socks5端口,通过该端口就可访问到公司内网的资源了。于是网络拓扑大体如下图所示: 我把服务端放在占美x86小主机上,Banana

UMLGen开发踩坑

最近这段时间都在写一个叫UMLGen的GUI程序,从名字可以看出,就是一个用来画UML图的工具,与大多数现有的WYSIWYG(所见即所得)的UML画图工具(比如Visio,StarUML等等)不同的是,UMLGen使用代码的形式来描述UML图的呈现,与LaTeX的思想类似,即WYTIWYG(What You Think Is What You Get,所想即所得),我个人认为这种方式特别适合程序员使用。现在可用性已经很好了,主窗口截图如下: 程序是用Qt写的,开发过程中

Qt unzip

最近又要在一个Qt程序中解压缩一些zip文件,以前用过QuaZIP,总觉得如果能不引入一个额外的第三方库会更舒服一些,于是上网搜了一下,还真有办法! 先在.pro文件中添加module: QT += gui-private 然后在.cpp文件中添加头文件引用: #include <private/qzipreader_p.h> 最后就是解压缩: QZipReader cZip(archive.zip); foreach(QZipReader::Fi

HAProxy for SS(R)

昨天在喵帕斯tg群里看到一张HAProxy的截图,经过了解,原来是梅林固件自带的,真是不错的想法。 想当初,我为了实现$$的load balance,不惜花费大量的时间和精力,自己用Go写了个客户端,结果后来喵帕斯全面开启多用户单端口,而我的程序在带参数的混淆和协议上实现有问题,于是换回用libev版了。用libev版唯一的缺点就是线路变动(比如偶发性down掉,永久换IP,永久移除等等)时,需要手动去切换一下。虽然喵帕斯同时提供了几十条线路,却压根没发挥作用,如果线路稳定

家中网络问题一则

某天早上起来,发现屋里手机、电脑都上不了网了,照惯例先后重启了一下路由器和WIFI中继,都不管用,感觉问题有点严重了。 屋里的网络拓扑如图所示,略显繁杂: 大多数情况下,都是R6300v2这个二级路由器不稳定,时不时WIFI连不上了,重启就好了,也遇到过TP-Link的WIFI中继不工作的情况,也是重启就好了。一般情况下我是不愿意重启用于拨号和翻墙的作为一级路由器的Banana Pi R1的,因为翻墙部分的程序有时候在板子起来后并不能自动运行,要ssh登录上去后手工输

Go微信公众号爬虫踩坑实录(二)

过去一周仍然花了些时间更新微信公众号爬虫,又踩到些坑,记录一下。 之前是用semaphore来控制并发下载的goroutine数,后来发现这种方法看起来比较粗放,于是改成固定数量的goroutine池,比如固定30或50个goroutine一直跑着只用于下载HTML,固定15个goroutine一直跑着只用于将HTML转换为PDF,前一种goroutine下载完一个HTML后通过channel告诉后一种goroutine开始转换,感觉好多了。 微信公众号文章中常常

Go微信公众号爬虫踩坑实录

用Go开发微信公众号爬虫,踩到一些坑,记录如下。 爬虫必然会开启大量http.Client去抓取内容,于是使用sync.Pool来管理这些http.Client,但是马上就会遇到sync.Pool返回一个nil出来,尝试换成自己写一个简单的Pool实现,仍然有相同问题,后来才发现原来在下面把变量改成nil然后放回pool去了。 文章主体的HTML文本下载是很快的,内嵌的图片资源下载很花时间,尤其是有些文章会内嵌很多图片,所以要把下载HTML和下载图片的semaph