菜菜博士

博士在网络的家

Linux多WAN负载均衡原理

玩了一段时间 EdgeRouter , 对他的负载均衡的可玩性非常着迷。仔细研究后发现,他的实现原理是 iptables 标记数据包,然后对标记的数据包使用使用特定的路由表实现的。 Linux 默认有一个路由表。这张路由表叫 main 路由表。但是可以用 ip route 命令添加其他路由表。非默认路由表可以用一个数字编号。并且 ip rule fwmark 命令可以设定让被标记的数据使用...

家庭wifi覆盖建议

私以为,目前民用 wifi 路由器市场已经完全走上了邪路。天线越来越大,发射功率越做越高。都敢冒着法律的风险使用大大超过 100mW 的发射功率了。且不论巨大的发射功率可能对人体造成的影响,就从技术上说wifi的特点,为什么wifi不适合大功率发射吧。 第一点,空口带宽是个共享带宽。 共享范围是无线可达的地方,取决于发射功率和损耗。频率越高损耗越大。发射功率越大,意味着越多的设备进入这个...

新的路由器

上文说到,我使用无线网桥衔接了2个家庭,组成了一个局域网,共享了宽带。 但是,局域网和局域网还是太过开放,网桥又是一段不怎么可靠的网线。因此2个局域网最好能隔离开来,隔离广播域,又能通过IP地址直连。 经过研究发现家里宽带还可以多拨。虽然多拨并不叠加带宽,但是可以多获得一个公网ip。有多一个 ip 对 NAT 来说,也是可以极大的提升网络性能的。 于是找啊找,找发现了一个利器 “ubnt...

远程共享宽带

最近姐姐搬迁到了新家。在我家屋顶能直接看到她的新家。所谓目视可达。我就开始思考,是不是可以无线直连,然后共享网络呢。 于是淘宝上搜了一圈,最后弄了对山寨 UBNT 无线网桥。然后买了一箱网线,从家里一直沿着电信的光纤一路跟随布线到了楼顶。 架设好后,姐姐家同理。也是室外放个网桥,然后线走进屋内。 在屋内,2个网桥都分别和各自的无线路由器连接。 无线网桥就相当于一段网线。 把2个路...

IELTS essay test 1

I couldn’t believe that some people just refused to admire the huge advantage that internet has bought us especially when it was utilized as a source of information. They made the assumption that i...

UDP and congestion control

TCP is good, good for nearly everything. It’s a general purpose abstraction for networking applications. But TCP is bad for one thing: it’s general. If you have some special need, setsockopt(2) can...

ASIO 腾空出世 (那些年我们追过的网络库.PartII)

这是上篇 那些年我们追过的网络库(PartI) 的后续, ASIO 腾空出世 在地球最大的岛上,另一位少年开始拜读 ACE 的大作。那时候,没有 libuv 没有 libev 更没有 libevent . 有的只是 ACE. 然而这个南方小国的少年没有跟风陷入 ACE 崇拜,他以敏锐的目光察觉到了 ACE 的弊病。 ACE 哪里做的不好?又哪里是值得借鉴的? 少年在给 c++ ...

那些年我们追过的网络库(PartI)

#为什么要用 C++ 编写服务端程序? 如果说答案是性能,那么肯定有人会满不在乎。觉得性能不够的话, 只要加机器就可以了。 然而更少的机器,意味着更低的能耗,更少的硬件投入,更少的人力资源投入去维护机器。总而言之,更低的成本。 肯定会有人说,C++的开发速度太慢了。然而这并不是绝对的。C++也可以做到非常快速的开发。有句俗语 * “脚本一时爽,重构火葬场” * 说的正是脚本语言开发的项目进...

自我意识和物质

现代的科学认为物质是不生不灭的. 至少在宇宙的寿命内是这样. 物质的诞生意味着宇宙的开端, 物质的消失意味着宇宙的灭亡. 在宇宙中, 意识并没有特殊的地位. 它不过是地球40亿年进化史的一个副产品. 真的是这样的吗? 我始终坚信的一个宇宙真理就是, 万物平等. 伽利略给了运动和静止一个平等的地位. 爱因斯坦给了所有惯性参考系平等的地位. 物理学的发展, 就是不断的消除特例, 不断的将原本...

GLSL加速 YUV 显示

通常来说,视频都是使用 YUV 格式编码的。YUV 最符合人眼的结构,因为人眼对亮度要比对颜色敏感的多。 YUV 将颜色分成一个 亮度信号和2个色差信号。于是就可以使用更多的bit数去编码亮度信号。在同样的每像素比特位数下,YUV 能比 RGB 保留更多的信息。 But YUV 要在 PC 屏幕上显示,不那么友好。需要转成 RGB 格式。网上一搜一大把,这里就不贴转换公式了。 将YUV转...

ubuntu 太反人类了

ubuntu 这个烂东西, 我本来不打算吐槽的, 反正烂东西我不触碰就是了. 但是啊, 烂东西呢, 你不过去招惹它, 它还是会过来招惹你, 不管你愿意还是不愿意. ubuntu 为啥烂 ? 怎么招惹我了? 因为咱用了 travis-ci . travis-ci 是个好东西啊, 每次你 git push , 它就默默的帮你编译一遍代码. 哪个 commit 没编译过, 一目了然. 问题...

也说 jitter

搞数字音频的,经常会提到 jitter。 什么是 jitter ? jitter 就是时钟的随机抖动。这个抖动啊,来自量子世界,是无法消除的,否则海森堡大人要从棺材里跳出来了。 jitter 只能减少,不能削除。 那么 jitter 对音频有啥影响呢? jitter 主要影响就是,经过 DAC 重建模拟信号的时候,时钟的不稳定导致重建信号偏离原来的位置。结果上看就是波形不再符合...

更高采样率,更低成本

在继续本文之前,容我提出一个摩尔定律的推论: 离摩尔定律越近,发展越快,成本越低;反之,离摩尔定律越远,发展就越缓慢,成本也难以下降。 [待续] === 2023 年 12月 21 日填坑 === 没想到,当年的一篇文章,我居然没完成。挖坑了这么久。 这次来回填。 在玄学HIFI领域,是反摩尔定律的。 数字音频,是个跨领域的行业。一方面,他是数字化的。一只脚在摩尔定律统治的...

超线程, 优先级和调度策略

这是 ck 的一篇文章,原始链接在此 (SMT/Hyperthreading, nice and scheduling policies)[http://ck-hack.blogspot.com/2014/08/smthyperthreading-nice-and-scheduling.html]

使用自己硬件的时候写的两个补丁

键盘问题 去年买了一个机械键盘。不过一直有一个困扰我的问题,就是键盘插入 USB 口后,会等待 10s 左右的时间,然后才识别。查看 dmesg 输出会看到有什么 Timeout 的。 后来发现是硬件 bug。而这种硬件 bug 是可以被内核 work-arround 的。 具体的来说就是,一个 USB-HID 插入的时候,内核会询问设备的一些特性,比如说是否支持多点触控之类的。 但是我这...

avbot 10.4 发布

对于不知道 avbot 是神码的同学,猛击这里 avbot 不知不觉都已经经历一年有余的开发啦。 10.4 版本应该是一个里程碑式稳定版本。呵呵。 更新还是挺多的。 avbot 的验证码识别功能详情请参考项目 wiki 下面是 Changelog — 10.4 * 更新了内置的 gloox 库。 10.3 * 添加了 systemd 支持 10.2 * 添加了 libZM...

avbot 里的回调

asio 这样的库,每次发起一个操作,就带一个回调.回调告诉你,神马时候操作完成了,完成的咋样. 在所有被主动调用的接口处, avbot 基本上都遵循了 asio 的这一设计准则:提供回调完成事件通知. 但是,还有另一种回调:这个回调并不是因为你主动调用了某个接口,而是因为,这是框架的一部分. 你不用调用框架,框架会来调用你. 在被框架调用的地方,如果阻塞了,势必会导致框架内...

读博客园的创业历史

前些日子,看到微博上传说,博客园的真爱是阿里云。说他们在阿里云平台上走了一次又一次的弯路,当了一次又一次的小白。但是,阿里虐他千百遍,他待阿里如初恋。 顿时觉得有趣,于是去看了博客园解决云计算之路上的一个又一个坑。 开始是抱着围观群众看热闹的心态去看的,看来他们一年多踩的无数个坑,每次踩坑还都去研究源码去找解决办法,顿时觉得,这个团队其实是一个脚踏实地的人在领导。 没有那种浮躁的氛围,肯...

纯真数据库下载或自动更新实现

用过珊瑚虫的童鞋都知道, 有个叫 “纯真数据库” 的东西, 可以查询 ip 地址对应的物理地址. 纯真数据库是有个名为 QQWry,DAT 的二进制文件, 可以通过纯真数据库自己提供的查询程序进行更新. 有关该数据库格式和解析的内容, 本帖子暂时不讲, 有机会的话, 偶会另行开个新帖子讲讲. 这里讲的是, 不通过官方的查询程序, 如何获取到这个数据库. 通过对官方程序进行抓包, 得出下...

聊聊 type erasure

什么是类型橡皮擦? type eraer是什么? 为什么这么有用? 到底它是如何帮助你构建灵活强大的软件的? 我们知道 C++ 是一个强类型的语言。 不同类型之间有天壤之别 ,不能任意转化——函数有签名,只有符合类型检查才能调用。 类型稍微有点不匹配,那带来的是一堆堆编译错误。 然后很多时候,我们会想,C++的类型能不要那么强就好了!比如说设计一个回调函数 ,这回调函数非得是那个类型的...