0x00 小镇的网络
-
海外 IP 高位端口的 Inbound 流量全都被封了
原来用的是 Zerotier,不过不受自己控制的 Server 总感觉使用起来怪怪的。
49 那里了解到了 Tinc VPN
于是借着这个机会玩一玩高端大气上档次的 SDN/Mesh Network

0x01 安装
-
Stable 版本还没有便利的 join 功能,于是用 1.1-pre14 版本
用的是 49 打包的 deb

wget file.hestia.moe/tinc.deb
apt-get install liblzo2-2
dpkg -i tinc.deb

0x02 初始节点
-

tinc -n Networkname init Nodename
tinc -n Networkname add Mode Switch
tinc -n Networkname add Interface tinc
echo "ifconfig \$INTERFACE 10.1.1.1/16" >> /etc/tinc/Networkname/tinc-up
tinc -n Networkname start
tinc -n Networkname invite newNodename  # add a new invitation

0x03 新的节点
-

tinc join xxxxxxxxxxxxxxxxxxx  # Join via invitation string
echo "ifconfig \$INTERFACE 10.1.1.2/16" >> /etc/tinc/Networkname/tinc-up
tinc -n Networkname start

0x04 一些指令
-

tinc -n Networkname top  # 查看所有节点和实时流量

0x05 其他系统
-
macOS:

brew install tinc --devel

Windows:

安装tinc
安装TAP
GUI 配置 TAP 的网络适配器(最好写个网关,否则强制为公共网络)
把适配器改名叫 tinc
tinc.conf 加一行 Interface = tinc

0x00 冰冷的天里散热风扇胡乱地吹
-
冰凉的 mac 把它的体温通过C面手托传递给我的手

0x01 媒体键同学@提不起劲
-
这两天 volume up down 两个媒体键按下去总要一段时间才会有反应,似乎呈现出block几秒的状态

看了一眼系统信息
macOS X Sierra 10.12.3, Uptime 36 days

根据 discussions.apple.com 的一篇帖子

把 Audio Daemon 进程杀死之后,该进程在短时间内自动重新启动,媒体键反应恢复正常。
杀死 Audio Daemon 进程的命令是:sudo killall coreaudiod

于是问题解决

0xff Mac 继续着它的 uptime,如同每一台电脑
-
我在混乱的人生中寻求稳定和慰藉,如同大多数人
突如其来的文艺

0x00 奇怪的编码
-
今天做一个小题目,遇到了一个奇怪的编码方式,查看 Hint 之后发现使用了 UTF-9....
Emmmm.....

0x01 UTF-9 是啥
-
UTF-9 是 IEEE 在 2005年4月1日 愚人节
在 RFC4042 中规定的两种 Unicode 编码之一
这两种编码分别是 UTF-9 和 UTF-18

0x02 安装别人写的 utf-9 编码 module
-

git clone https://github.com/enricobacis/utf9
cd utf9
python setup.py install

刚装好的 minimal debian,提示没有 setuptools...

sudo pip install setuptools

又提示没有 pip....

sudo apt-get install python-pip

setup.py 可以跑了,报错 gnu gcc exit 1,提示找不到 Python.h 文件
在 /usr/include/Python2.7 里面确实没有,于是把 dev 包装好

sudo apt-get build-dep python2.7-dev
sudo apt-get install python2.7-dev
(这里忘记到底装的是什么了...)

于是安装好了

0x03 测试一下
-

>>> import utf9
>>> utf9string=utf9.utf9encode(u'pcat')
>>> print repr(utf9string)
"8\x18\xcc'@"
>>> print utf9.utf9decode(s)
pcat

0xff Ref
-
http://www.cnblogs.com/pcat/p/6422211.html

0x00 一个坑...两个坑...三个坑
-
坑多才能进步

0x01 不好用的 Web 库
-
今天把 WebClient 封装了一下,干了两件微小的事情:

  1. 通过 override GetWebRequest() 添加了 Timeout 的支持
  2. 通过 override GetWebRequest() 和 GetWebResponse() 支持了自动维护 Cookie

其中第二点参考SOF的一个回答

然而调用 DownloadStringAsync() 的时候,发现 DownloadStringCompletedEvent 不会被 raise

本来以为是因为后面函数已经 return 了的原因,结果折腾了很久发现原来是 Timeout 没有生效
于是只能通过 Timer 的 Elapsed 事件来做 DownloadStringAsync() Timeout 的 workaround 了

同步版本的 DownloadString() 还没有试,不知道支不支持 Timeout

老版本的各种 Async 没有 await 用就算了,还有这种莫名其妙的坑....

可以看到微软从.NET4开始,向更现代的异步编程方式演变的过程中,造了很多坑出来

0x00 学习过程小结
-
今天在和巨巨们聊天的时候
从 Session 管理的具体实现,聊到了多线程编程。
再聊到了关于两种调度模型:竞争(eg:Lock)与共享(eg:Token ring)。

然后查资料的过程中,看了 抢占(Preemption),CPU instruction cycle,CPU atomic operation,以及 Lock 在 pthread 中的实现
等下次实际用到的时候,有时间再详细整理一下。

果然非科班出身还是差得远

0x01 一些延伸的资料
-
仍待整理
1.Atomic vs. Non-Atomic Operations
http://preshing.com/20130618/atomic-vs-non-atomic-operations/
2.抢占
https://en.wikipedia.org/wiki/Preemption_(computing)
3.pthread_rwlock https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_61/com.ibm.aix.genprogc/using_readwrite_locks.htm
4.CPU Atomic operation 和 instruction cycle 的关系
http://wiki.osdev.org/Atomic_operation
5.一个关于 pthread 的抢占调度没有按照预期运行的问题
http://www.linuxforums.org/forum/programming-scripting/159882-preemption-scheduling-pthreads.html
6.Instruction_cycle(大概是分片依据)
https://en.wikipedia.org/wiki/Instruction_cycle

Instruction_cycle:
    Fetch the instruction
    Decode the instruction
    Read the effective address
    Execute the instruction

7.rwmutex in golang
https://golang.org/src/sync/rwmutex.go

8.C# 实现多线程的同步方法详解
http://www.uml.org.cn/net/201104275.asp