用wg 构建自己的Overlay Network

traceroute from Mac to router

由于今天回家,加上Menci 告诉我说ios 上有wg 的客户端了,借我了一个美区账号,于是我就修了一下脚本,终于构建出来一个完全的overlay network了。

拓扑大概是:

1
2
3
4
5
6
7
           (10.56.100.1)
Mac --------- bj --------- hk (10.56.100.2)
/ \ /
/ \ /
/ dorm-router (10.56.100.3, 10.56.40.1)
iPhone |
10.56.40.0/24 (宿舍内网)

大概是用wireguard 全部做p2p的隧道。然后在一些需要做路由的节点写上路由表,来把整个网络打通。

我为了让路由节点的ip和interface看起来整洁一点,我创建了一个network namespace,用veth创建一对端口,连接主机和ns,这样所有中间路由节点就有统一的ip,并且不影响自己外部的网络。

最终配置的脚本在这里。 里面的iPhone 和 Mac生成的脚本是一个占位符,目的的是为了建立的wg的端口。寝室里面处理内网的那段配置也没有在这里面体现出来,需要手动处理一下。

搭建grafana

grafana

今天因为非常冷,然后打开米家的APP,woc,这怎么室内都有17度,昨天多少度来着?然后就想起来杰哥之前搭的grafana,于是干脆在路由器上面搭了一个。

首先建议到官网上根据官网教程安装grafana,influxdb,telegraf。其中grafana是一个显示的前端,influxdb是一个时间数据库,telegraf是抓数据喂到influxdb的工具。

这三个东西跑起来以后不需要啥设置,telegraf有一个默认配置是抓当前机器的cpu磁盘之类的信息上报,可以先玩一玩。

抓温度是用杰哥的脚本

miio是实现了小米物联网那一套的协议的一个工具,然后还可以用来控制设备,温度是从小米净化器那里抓的。miio有个坑是如果有好多子网,他就不知道在哪个子网下去发现设备了。所以建议直接在同一个子网下用另一台电脑miio discover一下,之后用miio tokens 来手动加设备。

经过测试得到结论关掉中厅门可以提高0.7度左右,也许是中厅漏风。

我同时加了一个用ifstat监控网速的监控,监控脚本在这

word.lcy.im

word.lcy.im

考虑到自己该背背单词准备托福(闲的发毛),于是就翻出来了之前在二手书店买的的托福词汇。之前想起来zrt做的一个背单词工具,但是他给下线了,就自己也做了一个。

因为自己发音不标准,于是主要是提示音标/意思/发音,然后输入拼写。前端用的bootstrap + jquery。后端自己输入单词列表,然后查询有道智云的API,给生成对应的翻译和发音。后端直接用flask撸了几个接口。代码并没有多少。

有道智云的API提供100元额度,但我发现乱搞用的并不慢,于是就把翻译等缓存下来了,发音直接用有道字典的接口嘿嘿。

1
https://dict.youdao.com/dictvoice?audio=abandon&type=2

word list是一个一个文件直接放到库里的,每次增加需要重新部署。于是刚刚折腾好了webhook自动部署,大概是用adnanh/webhook 这个程序,可以监听http请求调脚本。现在如果push代码服务器就会自动重新pull下来。服务端是跑在docker里面的。

因为还有api的key没有清理干净,暂时不开源。但有需要可以直接找我^^。

Stochastic Knapsack

Stocastic Knapsack 应该是指的每个东西的价值或者大小服从某个概率分布而不是定值,当你决定选择这个物品以后其价值就确定了。需要做这个的原因是因为我博弈论的论文需要用到这个东西。

实际上解起来也特别简单,枚举一下自己的操作,假设价值大小是离散的。那么我们就可以简单的对每种价值计算一下贡献乘上概率即可。

如果是离散的话,可以给出一种fptas的做法,和普通背包的fptas一样,把价值大小除以 $\frac{\epsilon}{n}$。仔细计算一下误差不会很大就对了。

这个东西我之前听起来第一眼是觉得不可做,今天闲着想了一下发现非常裸。。。。。。还没去搜论文看,不知道会不会有更好的解。但是有fptas看起来很牛逼就对了。(再次后悔算设没好好学。

入了几个新域名

最近松鼠症,集了好多域名。

lcy.cat

lcy.im

ummm.io

.cat 域名是一个赞助类顶级域名。要求注册这个域名的必须放六个月的加泰罗尼亚语相关的网站。不过个人注册不放应该没啥问题吧🤔。

im域名还行吧。感觉还是想要io的,但是买不来了(天天:“加钱就能买来”

那个io域名是真的肉疼,一年200+。只是觉得ummm这个词很好就注册来了。

我把博客迁移到blog.lcy.im上来了,从blog.lcybox.com的访问会重定向过来。

Hello Hexo

把博客从wordpress 迁移到了 hexo。最主要的原因是为了静态化博客,这样部署起来稳一些(mysql 太占资源啦)。

为了兼容之前wordpress的链接,可以在_config.yml 里面,设置permalink: :year/:month/:day/:title/,并且在之前的文章头部加入之前在wordpress用的链接,比如permalink: 济南。这里我觉得是奇怪的历史遗留问题,因为文章的头部permalink只会替换掉:title部分。所以幸好之前wp是用日期/标题这种格式的,否则兼容链接也是个大问题。

部署脚本,大概就是ssh 到服务器上自动pull下来然后生成静态文件

1
2
3
#! /bin/bash

ssh louchenyao@blog.lcybox.com "cd /home/louchenyao/mmm-blog/; sudo chown -R louchenyao public; git pull; git submodule update; hexo g"

一次由于Channel buffer size导致Go内存泄漏的分析

我代码里面有这么一段逻辑

func foo() int {
ch := make(chan int)
go func() {
ch <- 1
}()
go func() {
ch <- 2
}()
ret := <- ch
return ret
}

这里问题出在make(chan int)时,默认buffer size是0,这样两个go协程在试图往ch里加东西时,如果没有消费者,其实会一直卡死等待。但是我只消费一个,所以会导致一定有一个协程没有退出,导致内存泄漏。

我是通过go tool pprof 把goroutine的占用情况找出来发现这个问题的:

论文阅读笔记:Efficient Neural Architecture Search via Parameter Sharing

ENAS 主要做的是对于一个DAG图,i向i+1,…,n有边。i->j的权值矩阵是$\omega _{j, i}$。有一个Controller 会选择一些边激活,然后根据激活的边去建立一个网络。

基本方法:

对于RNN,DAG的1号节点接受$x_t, h_{t-1}$,分别为时间$t$的输入,和上一个的输出。然后对于每个节点,选择前面的节点是哪些。输出$h_{t}$是DAG的终点的平均。(我对RNN不了解,所以再细节的我没有太看明白)

对于CNN,有两种搜索方法。一种是宏观(marco)搜索,一种是围观(mirco)搜索。宏观搜索中每个DAG的节点代表一层layer,然后有33conv,55conv,sep-33conv,sep-55conv,max-pooling,avg-pooling,(不同层之间的参数不共享)。

微观搜索搜出来conv cell和reduction cell,然后如下图组合到一起。这里是直接把这一个cell复制N遍,第$i$层接受第$i-1$和第$i-2$层的输出。其中layer i就是第$i$层的输出。

Read More