在 ThinRouter 上开发网络(原理课)硬件测试仪软件部分的记录和一些经验

这个事情的 motivation 是被 harry 拉去上了一门叫 “高等计算机网络“ 的课, 而 harry 和 gyc 是本科生网络原理课的助教, 于是大作业的内容就是抱着 harry 的大腿给小朋友们做的硬件实验做一个测试平台. (harry: 你的老本行, 造 oj) 因为 laekov 的硬件水平四舍五入等于没有 (gg) 所以负责写前端. VUE + ChartJS = gg laekov 多年没写过前端了, 没想到 angular 都已经 gg 了. 在 “尽量轻量化, 以后烧进 flash” 的指导思想 (还有 harry 的 push) 下选择了 vue. 功能里有一个重要的需求是画一张同学们的路由器带宽-帧大小的曲线. 要是有 matplotlib 就好了, 然而既然是在写 web 就只能搞 js 的轮子了. 然而 chartjs 需要给它一个生的 canvas DOM object. 但是 vue 的制造者似乎就是非常不喜欢开发者拿生的 DOM, 甚至把 document 对象都给屏蔽了. (?...

December 22, 2020 · 3 min · laekov

如何修改 htop 中一列的宽度

最近在某个公用集群上手工编译了 htop 给小伙伴们用. 然后发现大家的用户名都是学号, htop 并不能把用户名显示全, 于是追责麻烦. 然而 htop 似乎并不支持改列宽, 于是就自己去看代码改列宽了. 以下基于 htop 的 2.2.0 release 版本. 表项的宽度在 Process.c 里的 474 行. 这玩意是 hard coded 的 sprintf 的位宽. 表头在 linux/LinuxProcess.c 里的 205 行, 修改方法是在 title="USER " 后面再加几个空格. (hard coding 真是让人崩溃啊) 然后可能会编译的时候说 struct Process has no member isKernelThread. 修的方法是在这个 c 文件的 146 行加括号. 注意不能改 .h 文件, 因为 .h 是在 make 的时候从 c 代码里抽取出来生成的 (什么鬼玩意)

November 30, 2020 · 1 min · laekov

RIO 各种口味品尝 log

这件事情的起因是双 11 的时候买了一箱 18 瓶不同口味的 rio. 然后一直觉得打乱这箱 rio 有点逼死强迫症. 直到今天终于决定开始喝它们. 然后又想到每种口味只有一瓶, 喝完之后就并不能复现实验来 rewind 某一种口味到底怎么样. 于是灵机一动决定写篇 blog 把每种味道都记录一下. 后来又购买了更多新的 rio, 于是持续更新中。 无糖系列 拿到四种口味 (准确说这不属于那 18 瓶) 因为无糖所以都不好喝. 一股不快乐的阿斯巴甜味. 白桃: 海星 葡萄: 比白桃难喝一点 柠檬: 酸 橙子: 酸 有糖普通系列 这个系列通常是纯色背景,度数在 3 度左右。 白桃接骨木花: 虽然是赠品但是似乎还不错 是甜的 玫瑰荔枝白兰地: 玫瑰香味+荔枝甜味 没啥酒味 挺好喝 白桃白兰地: (组合数学???) 比较常见的口味. 桃子味浓, 甜! 香槟: 有一点迷惑的水果甜味, 香槟味不是很浓. 但是甜啊! 乐橘乌龙: 闻起来有点橘子的酸酸味, 喝起来倒是偏甜, 比较清爽. 还挺好喝. 百香果伏特加: 果味纯正, 伏特加有一丢丢苦. 菠萝伏特加:菠萝味!超好喝。甜甜的。 芒果伏特加:闻/喝起来是那种没熟的青芒果的味。不太喜欢。 白葡萄味:连酒名都不标了?真的是果味汽水,类似于水晶葡萄。 白桃接骨木花:又一个没有酒名的汽水。花香味还挺好喝的。 黄金奇异果味:汽水,弥猴桃味有点冲。 香草冰淇淋风味:超好喝!!! 香香甜甜的...

November 29, 2020 · 1 min · laekov

时隔六年, 我怎么又在修 fcitx 了

在宿舍买了一台新显示器, 2k. 发现 3337u 和 6400m 都不支持 2k 输出, 于是愉快地买了个 windows 游戏本当前端用. 因为有 rtx 2060 而且想打游戏, 所以只能用 windows 了, 最近又很不喜欢双系统 (因为要重启很麻烦) 于是找到了解决方案: 在 3337u 上开个 vnc server, 在 windows 里连过去. 虽然内网是千兆但是破笔记本迷之降速到了百兆, 于是网络也并不快. 要命的是 super 键会被 windows 吃掉从而无法使用 kde 里面炫酷的窗口搬移特技. 想起了陈年老相好 dwm. 于是又在这台 ideapad 上用上了 dwm, 并愉快地自己修改代码配置了 colorscheme 和各种神奇的热键. 然后用得好好的 fcitx 就跪了. ctrl + 空格打死也加载不出来输入法. 尝试了各种重启重装 fcitx-configure 和删配置文件, 都没用. 一脸茫然. 各种搜索尝试之后发现管用的是在 vnc 的 xstartup 里面加上 export GTK_IM_MODULE="fcitx" export QT_IM_MODULE="fcitx" export XMODIFIERS="@im=fcitx" 然后就能解决问题了....

November 18, 2020 · 1 min · laekov

Pipedream

% Pipedream - Generalized Pipeline Parallelism for DNN Training % Authors from MSR + CMU + Stanford; Presentation & Interpretation by laekov % July 14 DNN Training 的三种并行模式 Data Parallel (DP) 沿 batch 维度进行切分 通信: 同步 weight Model Parallel (MP) 沿 weight 维度进行切分 通信: feature tensor 的求和或者拼装 Pipeline Parallel (PP) Inter-layer partition 通信: 切口处的 feature tensor 及它们的梯度 (在部分模型中通信更少) Overlap 通信和计算 (DP 的 lazy update 也算 pipeline 的一种) Inter-batch Parallelism 无并行的 pipeline 分摊 weight 所需显存 支持不同规格加速器混用 在 homogeneous 环境下毫无加速 GPipe 并行: 批处理模式 Pipedream 并行 多发射 forward 和 backwoard 交错进行 可填满流水线 计算通信 overlap 由 pytorch 框架实现....

July 14, 2020 · 2 min · laekov

JAX Reading Log

% JAX: Autograd and XLA % Jiaao Ho % July 9, 2020 功能和组成 Autograd: 自动求导, numpy 自动求导 JIT: 把 numpy 运算移植到 GPU 和 TPU 上 vmap: 自动 vectorize pmap: 自动 SPMD 自动求导和训练 使用 grad 函数实现 from jax import grad import jax.numpy as np def tanh(x): # Define a function y = np.exp(-2.0 * x) return (1.0 - y) / (1.0 + y) grad_tanh = grad(tanh) # Obtain its gradient function print(grad_tanh(1....

July 13, 2020 · 2 min · laekov

使用 Shortcuts 让 linux desktop 与 iOS 间获得 airdrop 般的体验

laekov 在研究如何用手机远程开关家里的台灯的时候发现了 ios 里 shortcuts 这个神奇而好用(功能上) 的东西. 于是寻思着可以用 shortcut 解决手机/iPad 和 linux 桌面机之间文件和文字传输的问题, 于是进行了一些尝试. 为什么要上 AirDrop 因为它香啊. 可以在不同设备之间快速地传输文件. 比起开个微信传 / slack 传 / telegram 传这种还要让数据去地球另一端绕一圈的传数据方法, airdrop 它不用开聊天软件, 而且速度更快. 但是 AirDrop 的局限在于只能在 apple 设备之间使用. 对于桌面工作环境, laekov 还是更喜欢 linux (debian) + KDE, 用起来更爽一些. 所以每次在 desktop 和手机之间传输消息就成了一件非常麻烦的事. 如果是台式机, 不同的台式机, 台式机和笔记本, laekov 惯用 scp 进行文件传输. 但是 ios 下不存在一个好用没广告不收钱的 scp 软件. 但是 shotcuts 支持 run script over ssh, 就可以解决这个问题了. Run script over ssh Shortcuts 提供的非常好的一项功能叫 run script over ssh....

July 9, 2020 · 2 min · laekov

一篇理论上存在的本科毕业留念长文

这是一篇关于 laekov 在贵系本科四年的碎片式回忆. 关于学习 没学好的基础课 laekov 高三的时候文化课成绩似乎还可以, 但是上大学之后从线性代数A的线性空间部分开始崩溃, 到微积分B半期挂科伏地膜, 再到大雾B险些挂科. 大一大二的时候一方面选了很多课, 另一方面除了课程之外还找了很多事情干, 所以并没有好好地学习这些基础的课程. 显而易见地, 成绩也非常惨淡. 事实证明线性代数这样的课程还是非常必要的. 例如在写 Prague 的论文的时候就遇到了一个线性代数的证明, 然而不会证, 这种情况就十分惨惨. 再比如大雾里的量子物理, 热学之类的东西, 虽然凭当时的直觉觉得没啥用, 但是真的做科研的时候发现量子计算这条路想走也会更艰辛一些, 然后就会想要是当时花了更多的时间把量子搞得更懂一些该多好. 并不划算的抢先学 laekov 在年轻的时候天真地想空出一整学期没有课 (后来几乎就做到了), 所以一直在抢先选高年级的课, 并将这个战略一直贯彻到了大三. 然而事实证明这并不是一个非常合算的战略. laekov 在大一下的时候就先上了 OS 课, 原因是时间不冲突 + 对 os 比较感兴趣. 然而当时对 CPU 什么的完全没有正确的了解, 虽然在上完 OS 之后反倒对 CPU 的功能有了一定的认知. 然后大二上的时候就造了 CPU, 大二下才上数字电路设计. 这相当于把贵系的 “数电 - CPU - OS” 这个知识链完全反过来上了. 虽然 laekov 没有挂科, 但是中间有很多不懂的知识, 会错过很多深入探究的机会. 例如在造 CPU 的时候由于缺乏数设知识, 所以对电路的延迟和流水线设计都没有太多概念. 整个 CPU 造出来也是以 “造出来” 为目标的, 而且为了这个目标也花费了很多的心血, 而进一步的性能调优和适配更多的功能就完全无能为力了, 所以最后得分相对来说比较低....

June 23, 2020 · 12 min · laekov

远程部署一个通过 B 站直播分发的实验室集群监控系统

突发奇想在 debian 上装了个 obs. linux 下 obs 可以直接 capture audio output 了, 于是可以在直播里放音乐了, 非常赞. 但是我的笔记本的这个 HD 6400 实在是支持不太了 obs 这种繁重的负载, 于是想到了利用实验室的台式机作为直播前端. 首先要解决的问题是如何连上台式机并使用 gui. 正好发现 teamviewer 可以用命令行启动. $ sudo teamviewer daemon start $ sudo teamviewer info $ sudo teamviewer passwd <your passwd> 就这么就能获得远端的账号密码了, 就能用了, 非常开心. (虽然 daemon 获得号码可能要等一会儿, restart 若干次) 然后发现 obs 没法 window capture, 所有 window title 都是 unknown. 经过一翻搜索发现原因是 obs 的 locale 不对. 于是设了一下 LC_ALL 就能看到了. 然而 konsole 窗口是黑的一坨, 这和我手上的 debian 不太一样啊!...

June 19, 2020 · 1 min · laekov

毕业倒计时和打卡

要毕业了额. 虽然疫情让这个毕业季显得如此生涩. 但还是决定有仪式感一点…? 地来个倒计时吧. 虽然好像已经过了六天了. 前六天的一起补吧. 6.9 DAY20-DAY14 答辩的前一天. slides ready. 剩下的工作就是改改文章然后交给 kezhao 了. 于是决定把前些天没打的卡补上. 于是有了这篇文章. 20 最喜欢的一张照片 (翻了翻硬盘) 在学校里好像没啥印象特别深刻的照片. 大紫车刚喷出来的样子, 嗯还挺好看. 19 最喜欢/收获最大的一门课 俄语? hhh. 虽然只上了一学期并很累但是很开心. 树莓派跑丹, 存储, 数据结构, 数据库专题, 编原, 网原, 造机, 面向对象什么的, 就内容讲都还挺有意思的, 也学到了很多东西. 还有图形学写大作业 (虽然写得效果不咋的) 但写起来还是很有意思的. 还有微积分, 线代, 大雾, 电子学这些基础课虽然好像日常听不懂最后也没太学明白, 但也是很重要的基础课吧. 要说最, 好像还真最不出来. 18 第一次跑 3000 米? 大一第一门体育课是 5000 米跑. 每节课一次. 第一次体育课 5k 跑了 24 分钟? 毕竟还是有点基础的. 高一高二的时候偶尔晚上会去跑 1.5k 或者 3k, 在七中的操场上跑 10 圈. 就还好? 甚至北京的海拔比较低所以没有在成都那么累....

June 9, 2020 · 2 min · laekov