Sucha's Blog ~ Welcome

18年11月17日 周六 14:35

河西走廊

上个月忙工作焦头烂额,月底结束才稍微空闲。

之前在微信订阅号阅读晚清沧海事,有了解到左宗棠收复新疆的一些信息,加上去 年有去北疆玩,在乌鲁木齐、吐鲁番遇见的种种,心里有些疑问,就在平时阅读时, 稍加关注相关的文章。

加上自己更早时候有从兰州火车敦煌、之后再从张掖汽车穿越祁连山到西宁的经历, 对那边的风土人情还有不少记忆,前一阵不记得是看到哪里的推荐,高分河西走廊 这部纪录片,心中种了草,就在平时上班路上看了起来。

十集不多,断断续续看完了,前面信息略紧凑,后续晚清至现代的信息其实很少, 不过没关系,这些信息后续我可以慢慢补全。

说到左宗棠收复新疆是在晚清,但是在更早时候,中原对于西域就有认识,记得小 时候就有看过小人书,了解到张骞出塞这个故事。

那可是在公元前,距今 2000 多年,当时匈奴猖獗,屡屡侵犯中原,烧杀抢掠。汉 武帝想联合西域的大月氏一起对付匈奴,张骞领命,踏上路途。

要联系大月氏,就要经过河西走廊,就是现在的武威、张掖、敦煌,现在是无法想 象当时路途的艰辛。因为这块区域被匈奴控制,张骞路途被匈奴抓去扣为人质好 多年,后来找到机会继续西进,只带了随从,连匈奴老婆都不敢通知。

到了大月氏,才发现大月氏其实也被匈奴赶到了另外一片区域,且他们对于联合围 攻匈奴没有想法。张骞在大月氏呆了一年多,在返回长安的途中,又被匈奴抓住。 命好在匈奴单于驾崩的时候,趁乱出走,这次带着匈奴老婆回到了长安。

匈奴仍然屡屡侵犯中原,汉武帝时期国力也慢慢强盛,于是有了驱赶匈奴的打算, 其中最重要的,就是控制河西走廊。

得益于当时的名将霍去病的高光表现,汉武帝收复了河西走廊,并设立了敦煌、张 掖、武威三郡,这些都是汉朝的地名。后续仍然继续扩张,进而控制了新疆,设立 西域都护府这样一个军事机构管理这片区域。

在当时,新疆还是各种游牧部落,生产力低下,汉朝在西域设立治理机构,其实带 去了更为先进的生产技术、管理经验。打通了河西走廊后,西域商人可以安全、顺 利的往来中原通商贸易,一睹当时的超级大都市长安。

从西域到长安通商贸易的人越来越多,丝绸之路就是这么来的。当时的罗布泊还是 波光粼粼,楼兰城是丝绸之路的咽喉。

后来随着中原王朝的更替,丝绸之路也随着繁华、沉寂,大概就是这样。

记得去年在吐鲁番,还想着要不要去一下鄯善(古楼兰)的,后来犹豫了一阵,当 天下午 3 点就回到了乌鲁木齐,还是北疆好玩。

CategoryReading / Permalink

18年9月23日 周日 15:55

山竹和 NHL 比赛

没想到第一次看 NHL 比赛是在现场,体育馆里里外外感觉有一半都是外国人;比 赛相当激烈,场面火爆,也许带着厚重防具的原因吧,动作都很大,有那么一两次 双方对峙裁判介入才消停;攻防转换极快,换人就那么翻过围栏 N 上 N 下,都不 用停表的;技术犯规要关小黑屋罚时间,枫叶国火焰队有一次两人被关小黑屋,三 防五那个被动。

还有比赛中打着打着杆子就飞了是真的,过了好一阵裁判才看到捡起送回去了,这 杆子应该不便宜。

夏天在冰凉的室内看这个是蛮爽的,虽然买的是偏僻的山顶票,因为人不多,留中 间风景好的地方去了;入场出场在地铁站还有摆渡车接送其实没有很麻烦。

那天阳光明媚,是深圳几周以来难得的好天气。只是第二天台风过境,横扫了这一 切。

Video Link

CategoryLife / Permalink

18年6月24日 周日 10:53

Timer、FastLZ & Erasure Codec

上次说到网络库的 timer,总觉得直接塞入网络库不是个好主意,一方面不是所有 的程序都需要 timer 来协助,另外一方面 timer 用途其实更广泛,可以放到更底 层的逻辑里。

实际是将其实现在 m_foundation 里了,接口提供创建多个 timer 序列,往具体 某个序列加入 timer 及其回调的时候,保证有序,这样每次 update timer 列表, 可以直接检查排在最前面的 timer 是否超时,不需要检查全部;另外,如果到期 时间冲突,解决的办法是开链表,同个到期时间的 timer 可以都排在一起。

保证有序的方案算法是使用 skiplist,时间复杂度为 O(log2n)。

另外,虽然是 timer,但实际设计是不考虑时间单位的,时间单位都由外面提供, 外部在 update timer 时,同时更新最新的时间单位就好;使用了 64bit 来表示 时间单位,表达空间应该足够了。

FastLZ 是个有很长时间未更新的库,这里的压缩,将其放在了 m_tunnel 这一层, 与 kcptun 不同。主要是看到了 snappy 用的 C++,包含太多文件,效果未必必 FastLZ 好多少,因为数据量少,CPU 耗费也不大,所以就没有采用。

其实后来还看到更好的 lz4,没有更换的原因是,实际跑起来,大部分都是 HTTPS, 这些压缩其实绝大部分用不上。

FastLZ 最少需要使用 66 byte,感觉放在 UDP 长度 14xx 的 playout 里,太浪 费了,是没有放到 m_kcptun 的考虑之一。

还有另外一点是,不能压缩的数据在跑 compress 的时候,返回的长度要比实际来 源更长,这个时候可以果断抛弃不压缩,在 m_tunnel 协议里,有命令字可以区分 这段 data 是否需要解压,这样对协议双方来说,至少有一方可以少走一次 decompress 了,而传输数据量可以保证最少。

粗看了一下,lz4 没有说压缩时最少需要多少字节,以及 dest buffer 需要比src 大多少,貌似需要探测,这点不如 FastLZ;另外,snappy 及 lz4 的解压速度是 亮点,但实际上对于数据量少的,没啥影响;就 CPU 耗费以及压缩率来看,折衷 方案更好的是 zstd,可这个不是单线程的,代码量复杂度都会上去太多,不好管 理。

Erasure Codec 用的是 Reed-Solomon,当然不是最新最先进几乎触摸到香浓极限 的算法。本来找到一个可用的,但是太耗 CPU 了,最后是找到一个使用 Cauthy 码的 cm256,网络上传输太不确定,TCP 仅保证了传输次序,内容校验有限,如果 上层发现数据错误,要么抛错误,要么重新传输,后者意味着又得重新发一次数据, 以及来回的时间耗费,不够经济。

另外,如果链路上一定会发生错误,就需要 Erasure Codec 了,要不会一直失败。 最后是使用了 payload 较高的 RS(11, 2),接近经典的 RS(239, 16),由于协议 本身也需要保证,因此 Erasure Codec 放到了最底层,UDP 之上直接装载。

多个协议下来,UDP 14xx 实际可以使用的数据量,payload 就更少了,也是没办 法。

CategoryProgramming / Permalink

18年6月9日 周六 00:58

老笔记本换 CMOS 电池 & Nexus 7 换 USB 尾插

这台笔记本是工作还不到半年,信用卡下来之后,透支买的,那块 CMOS 电池到现 在已经撑过了 10 年。最开始是作为开发用的机器,后来慢慢淡出,最后是安装了 Linux 变成不常开机的服务器。

最近是烦了那开机后必响的 BB,琢磨着应该是电池的问题,淘宝 ¥15 了一排 CR2032,百度了一下 BIOS 电池的位置,当然是开腔才能具体位置,换了之后其实 还是会响,需要重新设置一下 BIOS 时间才行。

Neus 7 是 12 年的一代,当时是因为分辨率才下定了觉醒,这个价格这个分辨率 是可以的,因为是给家里人用,电量变得越来越不济,后面干脆是 mini USB 口接 触不良,充不上电了。

同样是淘宝,同样是 ¥15,只是 Nexus 7 不好打开外壳,费了一点劲;还有就是 螺丝都太小了,华强北 ¥25 的小工具盒太勉强,当然最后还是换了。

CategoryMisc / Permalink

18年5月1日 周二 22:30

m_dnscnt 和 lua-web

前一阵子写了一个 m_dnscnt,一个并发多个 DNS 请求的客户端、库接口。

有这个需求的原因,在于系统提供的 DNS 请求是一个同步接口,开始请求后,得 等着 DNS 结束才能走下一步。

这带来两个问题,第一个问题是,如果我同时有 3 个 DNS 请求,总共花费的时间, 是这 3 个请求加起来的总和;第二个问题是,因为底层的网络库是异步的,不能 因为 DNS 请求是同步的,就将整个循环给阻塞住,因此实际是多开了线程才能用 好这个 DNS 请求接口,也因此多了一个 STM 同步操作。

并发、异步的 DNS 请求库,则没有这个问题。

当我将 m_dnscnt 以源代码接口的形式用到了 m_tunnel 上去后,感觉服务端 DNS 请求加快了不少,毕竟之前得一个一个顺序请求 DNS,现在则是同时请求多个,总 的花费时间大大缩短了。

另外呢,也将这 DNS 以库的形式用到了 lua-web 上去。以库的形式加入 lua-web 的原因是,m_net 本身已经用库的方式提供了 Lua 绑定,无法在同一个库里面暴 露接口给 m_dnscnt 使用。所以 lua-web 底层使用了两份 m_net 代码,其中一个是 单独用于 DNS 请求的。

这样 lua-web 就支持了 HTTP request,之前不支持域名,只支持 IP,现在则没 有这个问题了。

而在架构上,HTTP 层的支持算是完整了,如果以 web-framework 的要求看的话, 后续还需要 HTML 的支持。如果还需要加上一点,那就是 HTTPS 的支持,以及 websocket。HTTP/2 呢,就算了,那完全是另外一个东西。

还有,这些个东西,往后再说吧,目前的目标,并不是做一个 production-ready 的东东,而只是做一个类似教学用的工具,做个小巧,但五脏六腑清晰明了,可以 一眼看穿,但又确实可用的东西。

CategoryProgramming / Permalink

18年3月30日 周五 23:49

换回 suchang.net

再次换回 suchang.net

CategoryThisSite / Permalink

18年3月19日 周一 01:06

True Life

前几天在推上看到这个新闻蛮惊讶的,当时看的是英文来源,里面的信息跟 中文报道有很大的不同。

想起二十多年前听到信息高速公路时是完全不理解,十多年前开始慢慢接受电脑进 入普通生活,改善工作效率的同时,也开始沉迷虚拟游戏中的各种。

可是现在呢,微博、微信、抖音、视频,各种虚拟场景占据了一天中那么多时间后, 也许网络中过得好不好要比被微信、工作IM撕裂的所谓现实生活更重要吧。

自从微信变成工作IM,特别是各种下班后,以及类似今年情人节那样被硬生生被拉 到一个微信群里解决bug到晚上九点多,我也终于理解自己不喜欢微信的原因。

还好家人都爱打电话,再说家人的微信群我也不爱看,根本都不回,打字太累了, 就像这篇打了大概有2个小时。

所以,看到这篇新闻后先是惊讶,对照自己的生活后觉得羡慕,也知道再也不可能 回退到,如新闻中加纳人的史前生活。​​​​

CategoryReading / Permalink

18年3月5日 周一 00:06

m_net 支持 FreeBSD

使用家里旧电脑配件新搭了一台 FreeBSD 后,开始跑程序,因为 FreeBSD 在网络 接口层面跟 MacOS 是很相似的,同样是 kqueue,所以修改比较小,只需要新开一 个宏定义,包起来的区域跟 MacOS 一样就行。

在这个基础上 m_net 开始支持 FreeBSD 了,同样的 m_tunnelm_kcptun 也开始 支持 FreeBSD 了。

其实不用修改啥,想着其实还不如支持大端需要修改的东西多,可是目前没有平台 跑大端,所以这个想法等实际需要后再说吧。

CategoryProgramming / Permalink

18年3月4日 周日 23:53

开始接触 FreeBSD

过年在家发现了两台旧电脑,是之前给家人安装新电脑后,各种拆装后剩下的,清 点了一下,CPU 是 I3 2300 之类的,主板华擎,内存 4G DDR3,这个配置感觉还 是可以的,MicroATX 架构,就想着不如搬到深圳,搭一台 FreeBSD 学习一下。

还带上了大学时就开始服役的 80G 希捷硬盘,由于是 IDE 口,这个硬盘没条件在 家测试了,其他部件包括电源,正常跑起了 BIOS。

到深圳后,只需要淘宝一个不带电源支持 MicroATX 的小机箱,大概 70 块这样, 因为忘记电源线,因此多破费了 20 块,不到 100 机器就可以跑起来了,感觉还 可以。

计划之外的是,那个 80G IDE 接上了淘宝的 IDE 转 SATA 小板,还是没法使用; 还好手头有一个 320G 的 USB 移动硬盘,说是用来备份的移动硬盘,可是很少使 用,年龄也很大了,10 年买的。

于是拆了硬盘盒,欣喜地看到了 SATA 口,愉快接上吧。

FreeBSD 的安装很傻瓜,我唯一不理解的是分区,貌似不能像我在 Linux 那样 给 home 单独分区,这样随便我折腾系统都没关系了。

pkg install 用起来也很溜,开了 samba 后,同样可以当成一台备份服务器,就 是速度要比用 USB 口传输慢了许多,好处是之前的 USB 口其实接触很不稳定,经 常跑不起来,所以其实我也不太想用这个备份的移动硬盘。

CategoryLinux / Permalink

18年1月1日 周一 23:56

电影芳华

今天安利家人电影,被迫接收了十几分钟的评论,脑袋要炸,下次不能随便安利了。

我评五分的电影被家人跟战狼2并列,说当时能进文工团的都不是普通人,且军分 区的子弟都能进部队,部队条件也很好。

所以影片表现的是当时极好的条件了,相比呢故事比较一般,都是普通的小事,戏 剧性不够,还不如我们普通人的生活。

我认同最后一点,可也许导演是故意的呢,毕竟整个主线是表现那个时代的风貌, 里面的任何人都不能被聚焦太多。而整个大的故事框架,是在类纪录片平静的语调 里展开的,基调是不能大褒大贬,这也就限制了里面人物的戏剧表现力了吧。

里面的很多镜头挺美的,有很多现场感很强烈的手持镜头,小可惜是开头那个镜头 没有一镜到底,另外画面风格被特殊处理为那种胶片的风格(也许就是胶片机拍的 吧),小缺点是里面的艺术表现被拔高了,毕竟这是文艺片而不是纪录片吧。

总的来说,比战狼2给我的观后感更为强烈,评分也就更高了。

CategoryLife / Permalink

17年12月2日 周六 11:56

Emacs 升级到了 25.3.1

Emacs 升级到了 25.3.1,因为许久没有写这个 blog,忘记了应该用什么命令来加 入 entry,还以为是 emacs-wiki-journal 用不了了,不兼容了,开始杞人忧天。

升级 Emacs,是因为黑苹果想升级 10.13 而不得,不得已重装了系统,又回到了 10.12,然后看到了一个不错的模块,貌似是可以保存窗口大小的,依赖于新版的 Emacs,之前一直觉得蛮需要这个的。

只可惜,重装完系统后,这个模块叫啥名字,又忘记了,蛋疼。

不过 Emacs 总算跟上了新的版本,记录一下吧。

CategoryMisc / Permalink