菜菜博士

博士在网络的家

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

用过珊瑚虫的童鞋都知道, 有个叫 “纯真数据库” 的东西, 可以查询 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, 希望辛苦解决的人能给后来人以提示.

avbot 6.1 发布

对于不知道 avbot 是神码的同学,猛击这里 avbot 前不久悄悄迎来了半周岁的生日. 因此 avbot 也进入了 6.X 开发周期. avbot 6.0 系列第2个版本 6.1 发布了,同时发布的还有 rpm 包 和 windows 包 avbot 6.1 发布, 添加了股票报价功能, 另外也对 WebQQ 协议进行了更新. 下面是 Changelog — 6.1 * ...

avbot 5.1 发布

对于不知道 avbot 是神码的同学,猛击这里 avbot 5.0 系列开始了. avbot 5.0 系列第3个版本 5.1 发布了,同时发布的还有 rpm 包 和 windows 包 avbot 的版本规则是, 每月提升一个大版本号, 因为是开发 avbot 的第 6 个月了, 所以大版本号提升到 5 了. avbot 5.1 发布, 修复了一个非常严重,困扰了我们很久的一个 1...

avbot 4.7 更新

对于不知道 avbot 是神码的同学,猛击这里 avbot 4.0 系列第九个版本 4.7 发布了,同时发布的还有 rpm 包 和 windows 包 rpm 包有 x86_32(用于64位系统) 的和 i686 (用于32位系统) 两个版本。其实 rpm 包解压一下也可以用在 Deb 系的系统上。 PS: sourceforge 上的 avbot 项目我开通了匿名上传权限,欢迎大家...

avbot 4.6.1 更新

对于不知道 avbot 是神码的同学,猛击这里 avbot 4.0 系列第八个版本 4.6.1 发布了,同时发布的还有 rpm 包 和 windows 包 rpm 包有 x86_32(用于64位系统) 的和 i686 (用于32位系统) 两个版本。其实 rpm 包解压一下也可以用在 Deb 系的系统上。 PS: sourceforge 上的 avbot 项目我开通了匿名上传权限,欢迎...

avbot 4.5 紧急更新

avbot 4.5 是一个紧急更新版本, 所有用户都应该升级。 因为TX的WebQQ协议有变动, 会导致无法获取群列表。* 对于不知道 avbot 是神码的同学,猛击这里 avbot 4.0 系列第六个版本 4.5 发布了,同时发布的还有 rpm 包 和 windows 包 rpm 包有 x86_32(用于64位系统) 的和 i686 (用于32位系统) 两个版本。其实 rp...

avbot 4.2 新功能解释和实现

新功能 - 讲笑话 这是一个早就被呼吁的功能,今天抽空实现了。笑话这个功能实现起来有2个要点: 第一,这个笑话虽然是隔十分钟讲一次,可是不能打断大家的讨论,所以是出现十分钟的空闲后才发 第二,这个笑话需要从网页上抓取 第一个要点, 使用办法就是 Asio 提供的 deadline_timer. 设定定时器超时 10min , 但是如果有人发言, 就重设时间. 通过链接...