菜菜博士

博士在网络的家

更高采样率,更低成本

在继续本文之前,容我提出一个摩尔定律的推论: 离摩尔定律越近,发展越快,成本越低;反之,离摩尔定律越远,发展就越缓慢,成本也难以下降。 [待续] === 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++的类型能不要那么强就好了!比如说设计一个回调函数 ,这回调函数非得是那个类型的...

it is hopeless in china

I just Hate CHINA !

折腾了一下GPG和智能卡

GPG支持使用智能卡设备存储密钥。 使用文件系统来携带密钥( 不管是存到 家目录里还是放到U盘里携带)的弊端有很多 1. 文件泄漏密钥即泄漏 2. 不能保证密钥的物理唯一性 3. 文件可以被拷贝,文件可以被任意读取 4. 无法知道文件是否被拷贝,不能发觉 而使用智能卡设备,好处很多 1. 密钥具有物理唯一性,一旦生成即无法读取,即无法制作拷贝 2. 密钥可以由卡上的CPU生成,更能保...

折腾了一下 PC HIFI

最近家里闲置了一对老音箱。很大很重的老音箱。年纪有个十几年了吧。但是以前是很贵的东西。虽然现在音箱很便宜(但是便宜了,音质差了呀),但是我没舍得扔掉。在我眼里古董音箱很值钱! 于是我想个办法想废物利用。音箱有了,缺一个功放。 我第一个找到的功放,是基于 TD2024 芯片的数字功放。主要是图个便宜,不到 50 块钱就能有一个。 至于什么是数字功放,我恶补了一下功放方面的知识。 功放分 ...

对未来编译器的意淫

典型的 C++ 编译过程分 “预处理” “编译” “链接” 编译, 是最耗时的环节, 编译需要编译器解析 C++ 语法, 构建 AST (抽象语法树), 解析完成后, C++ 的重任才刚刚开始. 对于 C 来说, C 解析成语法树后可以立即开始生成目标代码. 但是 C++ 不能. 最耗时的步骤才刚刚开始. C++ 要在 AST 上执行 模板展开, 重载判决. 特别是 模板展开, 这可是一次...

让 C 回调支持 boost::bind

C++ 的 bind 非常方便! 但是如果你不得不处理一些 C 接口, 情况就会变得很糟糕, 你不得不处理一堆的 void* , 不能使用 bind ! 有神码办法可以解决这个问题呢!? 答案就是 接下来介绍的模板技术 c_func_wraper ! 用法很简单, 看下面的例子 static void * my_thread_func(int a, int b, int c) { ...

avbot 7.1 发布

对于不知道 avbot 是神码的同学,猛击这里 紧急更新, TX 于 8 月 1 日晚上修改了登录协议, 导致  avbot 全线瘫痪。所有的用户必须升级!必须升级! 7.1 新增了慧眼答题平台支持。urlpreview 功能可以定义黑名单, 不对指定的url进行响应. 用法就是在 qqlog 目录下建立 blockurls.txt 文件,写入不希望avbot解析的正则表达式。 avb...

GC是错误的内存管理模式

只要写程序, 就免不了要和各种资源打交道, 其中最频繁的莫过于内存了. 任何一个程序都需要内存管理. 它不管是简单的还是复杂的, C 语言的还是 java 语言的. 所不一样的是, 内存管理的细节掌握在谁的手里. 对于 C 语言, 毫无疑问的, 程序员掌握所有细节. 程序员获得了最大的灵活性, 作为代价, 编译器不对任何内存管理上的疏忽负责. 而人是 最容易犯错 的生物. 意味着, 程...

C++ 闭包 探秘

我经常说协程, 说协程的时候又经常会提到闭包. 还有我常说, boost::bind 是神器 归根结底, 神的是 “闭包” 没有闭包, 就无法实现 asio 协程 (注意, 我说的是 ASIO的协程, 并不是通常意义上 setjmp/longjmp 或者 CreateFiber 又或者 boost.context 创建的协程) 每次使用 bind , 你就创建了一个闭包. 简单的来...

我为什么喜欢用协程

查看过 avbot 代码的人都知道, avbot 到处都是协程. 用句 ACG 的话来说, 博士是协程控 那么, 为啥我会那么喜欢使用协程呢? 答案是协程大大简化了编程, 尤其是内存管理. 协程简化了内存管理 写过异步程序的人都知道, 编写异步代码最容易犯的错就是内存泄露了. asio的无栈协程通过 闭包 的形式, 将异步过程所要操作的资源绑定到 闭包 上, 并使用 shared_...

avbot 的一些技术决定

avbot 早已实现最初的目标 : 提供一个机器把 IRC/XMPP和 QQ群联合起来. 让不使用QQ的人和只使用QQ的人都恩嗯畅快的交流. 现在该歇息片刻, 回顾一下这一段历程, 以及编写avbot的时候所做的一些技术决定了. Boost.Asio 为什么 avbot 会使用 Boost 进行开发呢? Boost 有什么 好处? Asio 是干嘛的? 我觉得对于 Asio, Jac...

avbot 7.0-rc1 发布

对于不知道 avbot 是神码的同学,猛击这里 就像博士说的, 不开发验证码解决方案不升级版本号, 这次主版本好不到一个月就被提升了, 咋回事呢? avbot 7.0 系列发布预览版发布 了,同时发布的还有 rpm 包 和 windows 包 avbot 7.0 添加了很多功能, 最重要的莫过于支持了验证码识别! avbot 的验证码识别功能详情请参考项目 wiki 下面是 C...

avplayer 维基站点建立

avplayer 社区的维基站点建立了, 欢迎大家访问 http://wiki.avplayer.org 目前 avplayer 的维基站点开发免注册编辑权限. 大家可以把 avplayer 社区项目的一些心得分享进行编辑. 比如在 windows 上如何编译 avbot, 希望辛苦解决的人能给后来人以提示.